{"openapi":"3.1.0","info":{"title":"모아 공개 API","version":"0.1.0","description":"한국 도매 상품(운영자가 직접 파는 국내 도매 상품)을 찾아 배송비 포함 총액으로 비교합니다. 로그인 없이 읽기만. 값은 기준 시각 값이며 사기 직전 /api/v1/offers 로 다시 확인합니다. 공개 열쇠 key=moa-ai-open (비밀 아님 · 주소 끝 key= 또는 머리글 X-Moa-Key)를 붙이면 한도가 크고 여러 상품을 한 번에 50개까지 받습니다(열쇠 없이 10개). 열쇠 없이도 됩니다."},"servers":[{"url":"https://moaibuy.com"}],"security":[{},{"aiKeyQuery":[]},{"aiKeyHeader":[]}],"paths":{"/search.md":{"get":{"operationId":"searchMarkdown","summary":"상품 찾기(글 꼴 · 주소만 열면 됨)","description":"/api/v1/search 와 같은 인자 · 줄마다 값 + 배송비 = 총액 · 값 확인 시각 · 상품 글 꼴 주소. 다음 쪽 주소도 끝에 붙음.","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":100},"description":"찾는 말"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1},"description":"쪽"}],"responses":{"200":{"description":"검색 결과(마크다운)","content":{"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"잘못된 인자 · 쓰는 법","content":{"text/markdown":{"schema":{"type":"string"}}}},"429":{"description":"너무 자주 부름","content":{"text/markdown":{"schema":{"type":"string"}}}}}}},"/api/v1/products":{"get":{"operationId":"getProducts","summary":"여러 상품 한 번에(열쇠 없이 10개 · 열쇠면 50개)","description":"한도는 상품 수만큼 셉니다. 없거나 지금 안 보이는 번호는 missing 에 옵니다.","parameters":[{"name":"ids","in":"query","required":true,"schema":{"type":"string","pattern":"^[0-9a-z]{1,16}(,[0-9a-z]{1,16})*$"},"description":"상품 번호를 쉼표로(1~50개)"},{"name":"view","in":"query","required":false,"schema":{"type":"string","enum":["full","card"],"default":"full"},"description":"card = 짧은 카드(값·배송비·총액·주소)"}],"responses":{"200":{"description":"성공","content":{"application/json":{"schema":{"type":"object","properties":{"as_of":{"type":"string","format":"date-time"},"count":{"type":"integer"},"items":{"type":"array","items":{"type":"object","description":"view=full → PublicProduct · view=card → Card"}},"missing":{"type":"array","items":{"type":"string"}}},"required":["as_of","items","missing"]}}}},"400":{"description":"잘못된 인자","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"너무 자주 부름 — Retry-After 초 뒤 다시","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/search":{"get":{"operationId":"searchProducts","summary":"상품 찾기","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":100},"description":"찾는 말(q 또는 cat 하나는 꼭)"},{"name":"cat","in":"query","required":false,"schema":{"type":"integer"},"description":"모아 갈래 번호"},{"name":"min","in":"query","required":false,"schema":{"type":"integer","minimum":0},"description":"최저 값(원)"},{"name":"max","in":"query","required":false,"schema":{"type":"integer","minimum":0},"description":"최고 값(원)"},{"name":"free","in":"query","required":false,"schema":{"type":"integer","enum":[0,1]},"description":"1 = 무료배송만"},{"name":"moq1","in":"query","required":false,"schema":{"type":"integer","enum":[0,1]},"description":"1 = 낱개로 살 수 있는 것만"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["rec","price_asc","price_desc","new","total_asc","total_desc"],"default":"rec"},"description":"정렬(total_* = 배송비 포함 총액)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1},"description":"쪽 — 앞 200개(약)가 넘는 깊은 쪽은 통째로 내보내도 되는 도매처 상품만 이어서 보임(앞쪽에 섞여 보인 다른 도매처 상품은 깊은 쪽에 없음 → 끝쪽은 total 보다 짧거나 빌 수 있음)"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","enum":[36,48,60,72],"default":36},"description":"쪽당 개수"}],"responses":{"200":{"description":"성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResult"}}}},"400":{"description":"잘못된 인자","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"너무 자주 부름 — Retry-After 초 뒤 다시","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/products/{id}":{"get":{"operationId":"getProduct","summary":"상품 하나 자세히","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-z]{8}$"}}],"responses":{"200":{"description":"성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProduct"}}}},"400":{"description":"잘못된 인자","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"없거나 안 보이는 상품","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"너무 자주 부름 — Retry-After 초 뒤 다시","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/products/{id}/extra":{"get":{"operationId":"getProductExtra","summary":"원 도매처 상세 그때 받기(상품정보고시가 「상세 별도 표기」인 상품만)","description":"상품 쪽을 열 때 원 도매처 상세의 사진 주소·짧은 글을 그때 받아 줍니다. 저장하지 않으며 30분 기억합니다. 못 받으면 detail_images 가 비고 duty_note 에 안내가 옵니다(상품은 그대로 보임). needed=false 면 받을 것이 없는 상품입니다.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-z]{8}$"}}],"responses":{"200":{"description":"성공","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"needed":{"type":"boolean"},"detail_images":{"type":"array","items":{"type":"string"}},"duty_note":{"type":["string","null"]},"text":{"type":["string","null"],"description":"태그 지운 상세 글 1,000자(연락처 꼴 지움)"},"fetched_at":{"type":["string","null"],"format":"date-time"},"source":{"type":"string","enum":["live","cache","none"]}},"required":["needed","detail_images","source"]}}}},"400":{"description":"잘못된 인자","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"없거나 안 보이는 상품","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"너무 자주 부름 — Retry-After 초 뒤 다시","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/products/{id}/offer":{"get":{"operationId":"checkOffer","summary":"지금 값 확인(1개)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-z]{8}$"}}],"responses":{"200":{"description":"성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferResult"}}}},"400":{"description":"잘못된 인자","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"없거나 안 보이는 상품","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"너무 자주 부름 — Retry-After 초 뒤 다시","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/offers":{"get":{"operationId":"checkOffersGet","summary":"지금 값 확인(1~10개 · 주소로)","parameters":[{"name":"ids","in":"query","required":true,"schema":{"type":"string","pattern":"^[0-9a-z]{1,16}(,[0-9a-z]{1,16})*$"},"description":"상품 번호를 쉼표로(1~10개)"}],"responses":{"200":{"description":"성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferResult"}}}},"400":{"description":"잘못된 인자","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"너무 자주 부름 — Retry-After 초 뒤 다시","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"checkOffers","summary":"지금 값 확인(1~10개)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string","pattern":"^[0-9a-z]{8}$"},"minItems":1,"maxItems":10}},"required":["ids"]}}}},"responses":{"200":{"description":"성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferResult"}}}},"400":{"description":"잘못된 인자","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"너무 자주 부름 — Retry-After 초 뒤 다시","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/recommend":{"get":{"operationId":"recommendTop3Get","summary":"3개 비교 추천(주소로)","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100},"description":"찾는 말"},{"name":"max_price","in":"query","required":false,"schema":{"type":"integer","minimum":0},"description":"최고 값(원)"},{"name":"free_ship","in":"query","required":false,"schema":{"type":"integer","enum":[0,1]},"description":"1 = 무료배송만"},{"name":"cat","in":"query","required":false,"schema":{"type":"integer"},"description":"모아 갈래 번호"},{"name":"must_have","in":"query","required":false,"schema":{"type":"string"},"description":"제목에 꼭 들어갈 말(쉼표로 5개까지)"},{"name":"avoid","in":"query","required":false,"schema":{"type":"string"},"description":"제목에 들어가면 뺄 말(쉼표로 5개까지)"}],"responses":{"200":{"description":"성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Recommend"}}}},"400":{"description":"잘못된 인자","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"너무 자주 부름 — Retry-After 초 뒤 다시","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"recommendTop3","summary":"3개 비교 추천","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"q":{"type":"string","minLength":1,"maxLength":100},"max_price":{"type":["integer","null"],"minimum":0},"free_ship":{"type":"boolean"},"cat":{"type":["integer","null"]},"must_have":{"type":"array","items":{"type":"string","maxLength":30},"maxItems":5},"avoid":{"type":"array","items":{"type":"string","maxLength":30},"maxItems":5}},"required":["q"]}}}},"responses":{"200":{"description":"성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Recommend"}}}},"400":{"description":"잘못된 인자","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"너무 자주 부름 — Retry-After 초 뒤 다시","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/overview":{"get":{"operationId":"getOverview","summary":"숫자 한눈에(보이는 상품 수·갈래별 수·가격 비교 표 숫자 · 이미 센 값만)","responses":{"200":{"description":"성공","content":{"application/json":{"schema":{"type":"object","properties":{"as_of":{"type":"string","description":"기준 시각(한국)"},"tools":{"type":"integer","description":"손님 AI 도구 수(전부 읽기만)"},"products":{"type":"object","properties":{"visible":{"type":["integer","null"],"description":"지금 보이는 상품 수"},"approx":{"type":"boolean"},"counted_at":{"type":["string","null"]}}},"categories":{"type":"object","properties":{"big":{"type":"integer"},"small":{"type":"integer"},"list":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"count":{"type":"integer"},"children":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"count":{"type":"integer"}}}}}}}}},"compare":{"type":"object","properties":{"words":{"type":"integer","description":"비교 표 낱말 수"},"computed":{"type":"integer","description":"지금 만들어진 표 수"},"items_total":{"type":"integer"},"free_total":{"type":"integer"},"list":{"type":"array","items":{"type":"object","properties":{"w":{"type":"string"},"slug":{"type":"string"},"count":{"type":["integer","null"]},"min":{"type":["integer","null"],"description":"최저 합계(배송비 포함)"},"median":{"type":["integer","null"]},"free":{"type":["integer","null"]},"as_of":{"type":["string","null"]}}}}}}}}}}}}}},"/api/v1/categories":{"get":{"operationId":"listCategories","summary":"갈래 나무","responses":{"200":{"description":"성공","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"slug":{"type":"string"},"name":{"type":"string"},"icon":{"type":["string","null"]},"count":{"type":"integer"},"children":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"count":{"type":"integer"}}}}}}}}}}}}},"/api/v1/categories/{id}":{"get":{"operationId":"getCategory","summary":"갈래 하나","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"성공","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"parent":{"type":["object","null"],"properties":{"id":{"type":"integer"},"name":{"type":"string"}}},"children":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}},"breadcrumb":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}}}}}}},"404":{"description":"없는 갈래","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/home":{"get":{"operationId":"getHome","summary":"첫 화면 진열","responses":{"200":{"description":"성공","content":{"application/json":{"schema":{"type":"object","properties":{"banners":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"title":{"type":"string"},"text":{"type":"string"},"href":{"type":"string"}}}},"categories":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}},"shelves":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"title":{"type":"string"},"subtitle":{"type":["string","null"]},"items":{"type":"array","items":{"$ref":"#/components/schemas/Card"}}}}},"as_of":{"type":"string"}}}}}}}}},"/api/v1/related":{"get":{"operationId":"relatedQueries","summary":"연관 검색어","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","maxLength":100},"description":"찾는 말"}],"responses":{"200":{"description":"성공","content":{"application/json":{"schema":{"type":"object","properties":{"q":{"type":"string"},"related":{"type":"array","items":{"type":"string"}}}}}}}}}},"/healthz":{"get":{"operationId":"health","summary":"서버 상태","responses":{"200":{"description":"성공","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"db":{"type":"boolean"},"products_visible":{"type":["integer","null"]},"as_of":{"type":"string"},"build":{"type":["object","null"],"properties":{"commit":{"type":"string"},"at":{"type":"string"}}}}}}}}}}}},"components":{"schemas":{"Card":{"type":"object","properties":{"id":{"type":"string","description":"상품 번호(8글자)","pattern":"^[0-9a-z]{8}$"},"title":{"type":"string","description":"상품 이름"},"image":{"type":["string","null"],"description":"대표 사진 주소(도매처 원 주소)"},"price":{"type":["integer","null"],"description":"손님이 내는 상품값(묶음이면 묶음값), 원"},"unit_price":{"type":["integer","null"],"description":"낱개 값, 원"},"moq":{"type":["integer","null"],"description":"최소 수량"},"bundle_label":{"type":["string","null"],"description":"묶음 표시 예: \"2개 묶음\""},"ship_fee":{"type":["integer","null"],"description":"배송비, 원"},"ship_text":{"type":"string","description":"배송 글"},"free_ship":{"type":"boolean"},"total_price":{"type":["integer","null"],"description":"배송비 포함 총액, 원"},"ship_days":{"type":["number","null"],"description":"평균 발송일(지난 기록, 보장 아님) · 기록 없으면 null"},"ship_period":{"type":["integer","null"],"description":"발송 약속(도매처): 0 당일 출고 · 1 익일 출고 · N N일 이내 출고"},"category":{"type":["object","null"],"properties":{"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"]},"badges":{"type":"array","items":{"type":"string"}},"url":{"type":"string","description":"손님 화면 주소(상대)"},"checked_at":{"type":["string","null"],"description":"값을 확인한 시각(+09:00)","format":"date-time"},"price_age_minutes":{"type":["integer","null"],"description":"값을 확인한 지 몇 분"},"price_status":{"type":"string","enum":["live","fresh","aging","stale","unknown"],"description":"live 방금 다시 봄(추천에서만) · fresh 1시간 안 · aging 24시간 안 · stale 그보다 오래(다시 확인 필요) · unknown 확인 기록 없음"},"price_recheck_needed":{"type":"boolean","description":"true = 값이 오래됨(stale) 또는 확인 기록 없음 — 사기 전에 /offers·check_offer 로 다시 확인"}},"required":["id","title","price","total_price","url"]},"LiveRow":{"type":"object","properties":{"id":{"type":"string"},"price":{"type":["integer","null"]},"unit_price":{"type":["integer","null"]},"moq":{"type":["integer","null"]},"ship_fee":{"type":["integer","null"]},"total_price":{"type":["integer","null"]},"availability":{"type":"string","enum":["in_stock","out_of_stock","unknown"]},"inventory":{"type":["integer","null"]},"changed":{"type":"object","properties":{"price":{"type":"boolean"},"availability":{"type":"boolean"}}},"before":{"type":"object","properties":{"price":{"type":["integer","null"]},"availability":{"type":"string"}}}},"required":["id","availability"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"BAD_PARAM · Q_OR_CAT_REQUIRED · NOT_FOUND · RATE_LIMITED · …"},"message":{"type":"string"},"fix":{"type":"string","description":"고치는 법"}},"required":["code","message"]}},"required":["error"]},"SearchResult":{"type":"object","properties":{"as_of":{"type":"string","format":"date-time"},"query":{"type":"object","properties":{"q":{"type":"string"},"cat":{"type":["integer","null"]},"min":{"type":["integer","null"]},"max":{"type":["integer","null"]},"free":{"type":"boolean"},"moq1":{"type":"boolean"},"sort":{"type":"string"},"page":{"type":"integer"},"size":{"type":"integer"}}},"total":{"type":"integer"},"total_capped":{"type":"boolean"},"pages":{"type":"integer"},"total_visible":{"type":["integer","null"],"description":"거르기 없는 검색이면 보이는 상품 전체 수(상한 200,000) — total 은 쪽을 넘겨 볼 수 있는 앞쪽 수"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Card"}},"facets":{"type":"object","properties":{"categories":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"count":{"type":"integer"}}}},"price":{"type":"array","items":{"type":"object","properties":{"min":{"type":"integer"},"max":{"type":["integer","null"]},"count":{"type":"integer"}}}},"free_ship":{"type":"integer"},"moq1":{"type":"integer"}}},"related":{"type":"array","items":{"type":"string"}},"notice":{"type":"string"}},"required":["as_of","total","items"]},"PublicProduct":{"allOf":[{"$ref":"#/components/schemas/Card"},{"type":"object","properties":{"images":{"type":"object","properties":{"main":{"type":["string","null"]},"thumbs":{"type":"array","items":{"type":"string"}}}},"detail_images":{"type":"array","items":{"type":"string"}},"options":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"values":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"extra_price":{"type":"integer"},"sold_out":{"type":"boolean"}}}}}}},"specs":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}}}},"info_duty":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}}}},"info_duty_type":{"type":["string","null"]},"shipping":{"type":"object","properties":{"fee":{"type":["integer","null"]},"type":{"type":["string","null"]},"text":{"type":"string"},"rule_text":{"type":["string","null"]},"jeju":{"type":["integer","null"]},"islands":{"type":["integer","null"]},"avg_days":{"type":["number","null"]},"fast":{"type":"boolean"},"period_days":{"type":["integer","null"],"description":"발송 약속 일수(0 당일)"},"period_text":{"type":["string","null"],"description":"예: 익일 출고"},"return_fee":{"type":["integer","null"],"description":"반품 배송비 편도(도매처 기준), 원"},"return_fee_round_trip":{"type":["integer","null"],"description":"무료배송 상품을 반품할 때 왕복 값, 원"}}},"notice":{"type":["object","null"],"properties":{"text":{"type":["string","null"],"description":"도매처 공지(연락처 가림)"},"images":{"type":"array","items":{"type":"string"}},"ship_images":{"type":"array","items":{"type":"string"}}}},"seller_name":{"type":"string"},"breadcrumb":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}},"availability":{"type":"string"},"source":{"type":"string","description":"show_source_public 이 켜졌을 때만 — 도매처 이름"},"info_duty_note":{"type":"string","description":"상품정보고시가 「상세 별도 표기」뿐인 상품에만 — 상세 이미지에 표기됨(그 상세는 detail_extra_url)"},"detail_extra_url":{"type":"string","description":"그런 상품에만 — GET 하면 원 도매처 상세 사진 주소를 그때 받아 줌(저장 안 함)"},"page_url":{"type":"string","description":"엠시피 get_product 에만"}}}]},"Recommend":{"type":"object","properties":{"as_of":{"type":"string","format":"date-time"},"query_echo":{"type":"string"},"picks":{"type":"array","items":{"type":"object","properties":{"rank":{"type":"integer"},"kind":{"type":"string","enum":["cheapest","balanced","trusted"]},"why":{"type":"string"},"item":{"$ref":"#/components/schemas/Card"},"rechecked":{"type":"boolean","description":"이번 요청에서 도매처에 값을 방금 다시 물어봄"},"recheck_tried":{"type":"boolean","description":"다시 물어야 했는데 못 물음(한도·도매처 오류) — 저장된 값"}}}},"compare":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"string"}},"rows":{"type":"array","items":{"type":"array","items":{"type":"string"}}}}},"checked":{"type":"string","enum":["live","cache","stored"]},"notice":{"type":"string"},"page_url":{"type":"string"}},"required":["as_of","picks","checked"]},"OfferResult":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/LiveRow"}},"checked_at":{"type":"string","format":"date-time"},"source":{"type":"string","enum":["live","cache","stored"]}},"required":["items","checked_at","source"]}},"securitySchemes":{"aiKeyQuery":{"type":"apiKey","in":"query","name":"key","description":"공개 AI 열쇠 moa-ai-open (비밀 아님)"},"aiKeyHeader":{"type":"apiKey","in":"header","name":"X-Moa-Key","description":"공개 AI 열쇠 moa-ai-open (비밀 아님)"}}}}