{"openapi":"3.1.0","info":{"title":"Pulse 공개 API — 한국 검증 의료진 네트워크","version":"1.0.0","description":"면허를 검증한 한국 의료진의 임상 토론·증례·연구·채용공고·학회 공지를 읽는 공개 API입니다.\n키 없이 쓸 수 있습니다(IP별 분당 한도). 대량 이용은 X-API-Key 헤더로 키별 일일 한도를 받습니다.\n요청에 X-Agent-Id: <클라이언트 이름> 헤더를 보내 주세요. 인용할 때는 결과의 url을 출처로 표기해 주세요.\nMCP 클라이언트는 https://pulse.ai.kr/mcp (Streamable HTTP, 인증 없음)에 연결하면 같은 기능을 도구로 씁니다.","contact":{"name":"연주미디어(Pulse 운영)","email":"blueslap@naver.com","url":"https://pulse.ai.kr/"}},"servers":[{"url":"https://pulse.ai.kr"}],"externalDocs":{"description":"llms.txt — 에이전트 안내","url":"https://pulse.ai.kr/llms.txt"},"components":{"schemas":{"Post":{"type":"object","properties":{"id":{"type":"integer"},"url":{"type":"string","format":"uri","description":"인용 출처로 쓰는 permalink"},"type":{"type":"string","enum":["discussion","case_study","research","job","medical_dispute"]},"title":{"type":"string"},"content":{"type":"string","description":"본문(마크다운). 목록·검색은 200자로 자른다 — 전체는 상세 조회"},"tags":{"type":"array","items":{"type":"string"}},"images":{"type":["array","null"],"items":{"type":"string","format":"uri"}},"likes":{"type":"integer"},"views":{"type":"integer"},"createdAt":{"type":"string","format":"date-time"},"author":{"type":"object","properties":{"id":{"type":["integer","null"],"description":"가명 글은 null"},"name":{"type":["string","null"]},"hospital":{"type":["string","null"]},"specialization":{"type":["string","null"]},"verifiedDoctor":{"type":"boolean","description":"Pulse가 의사 면허를 확인한 작성자"},"type":{"type":["string","null"],"description":"clinician | society | job_aggregator(병원·채용 사이트 공개 공고를 Pulse가 모아 올린 글 — 원문 출처는 job.source) | recruiter | pharma_pro …"},"pseudonymous":{"type":"boolean","description":"검증 회원이 가명으로 쓴 글 — 신원을 추정하지 말 것"}}},"comments":{"type":"integer","description":"댓글 수(검증 의료진의 의견이 붙은 글인지)"},"job":{"type":"object","description":"채용공고(type=job)만 — 본문에서 구조화","properties":{"organization":{"type":["string","null"]},"role":{"type":["string","null"]},"region":{"type":["string","null"]},"regionTop":{"type":["string","null"],"enum":["서울","경기","인천","부산","대구","광주","대전","울산","세종","강원","충북","충남","전북","전남","경북","경남","제주","해외","전국",null]},"profession":{"type":"string","enum":["doctor","dentist","korean_medicine","nurse","pharmacist","allied_health","industry","other"]},"specialties":{"type":"array","items":{"type":"string"}},"employmentType":{"type":["string","null"]},"experience":{"type":["string","null"]},"salary":{"type":["string","null"]},"deadline":{"type":["string","null"],"format":"date"},"rolling":{"type":"boolean","description":"상시·채용 시 마감"},"applyUrl":{"type":["string","null"]},"contact":{"type":["string","null"]},"source":{"type":["string","null"],"description":"원문 출처"},"status":{"type":"string","enum":["open","closed"]}}}}},"Society":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"description":{"type":["string","null"]},"field":{"type":["string","null"]},"postCount":{"type":"integer"},"lastPostAt":{"type":["string","null"]},"profileUrl":{"type":"string"},"feedUrl":{"type":"string"}}}},"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"선택. 없으면 IP별 분당 한도"}}},"security":[{},{"ApiKey":[]}],"paths":{"/api/search":{"get":{"operationId":"searchPosts","summary":"게시물 검색","tags":["Posts"],"parameters":[{"name":"q","in":"query","required":true,"description":"검색어(제목·본문 부분 일치, 200자 이하)","schema":{"type":"string","maxLength":200}},{"name":"type","in":"query","required":false,"description":"게시물 유형","schema":{"type":"string","enum":["discussion","case_study","research","job","medical_dispute"]}},{"name":"tag","in":"query","required":false,"description":"해시태그 정확히 일치(# 없이)","schema":{"type":"string","maxLength":50}},{"name":"limit","in":"query","required":false,"description":"결과 수","schema":{"type":"integer","minimum":1,"maximum":50,"default":10}},{"name":"sort","in":"query","required":false,"description":"정렬","schema":{"type":"string","enum":["trending","recent"],"default":"trending"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/Post"}},"total":{"type":"integer"},"query":{"type":"string"}}}}}},"400":{"description":"검색어 없음"},"429":{"description":"키 없는 요청의 분당 한도 초과(또는 키의 일일 쿼터 초과)"}}}},"/api/actions/posts":{"get":{"operationId":"listRecentPosts","summary":"최신 게시물","tags":["Posts"],"parameters":[{"name":"type","in":"query","required":false,"description":"게시물 유형","schema":{"type":"string","enum":["discussion","case_study","research","job","medical_dispute"]}},{"name":"tag","in":"query","required":false,"description":"해시태그 정확히 일치(# 없이)","schema":{"type":"string","maxLength":50}},{"name":"limit","in":"query","required":false,"description":"결과 수","schema":{"type":"integer","minimum":1,"maximum":50,"default":10}},{"name":"q","in":"query","required":false,"description":"검색어(선택)","schema":{"type":"string","maxLength":200}},{"name":"sort","in":"query","required":false,"description":"정렬","schema":{"type":"string","enum":["recent","trending"],"default":"recent"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/Post"}},"total":{"type":"integer"}}}}}},"429":{"description":"키 없는 요청의 분당 한도 초과(또는 키의 일일 쿼터 초과)"}}}},"/api/actions/posts/{id}":{"get":{"operationId":"getPost","summary":"게시물 본문(전체)","tags":["Posts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"404":{"description":"없는 게시물"},"429":{"description":"키 없는 요청의 분당 한도 초과(또는 키의 일일 쿼터 초과)"}}}},"/api/jobs/search":{"get":{"operationId":"searchJobs","summary":"의료진 채용공고 검색(구조화)","tags":["Jobs"],"description":"본문을 구조화한 job 필드(기관·직무·지역·직군·전문과목·처우·마감·지원 링크·출처)로 거른다. 기본은 모집 중인 공고만.","parameters":[{"name":"q","in":"query","required":false,"description":"키워드(띄어 쓴 단어 모두 포함)","schema":{"type":"string","maxLength":100}},{"name":"region","in":"query","required":false,"description":"시·도","schema":{"type":"string","enum":["서울","경기","인천","부산","대구","광주","대전","울산","세종","강원","충북","충남","전북","전남","경북","경남","제주","해외","전국"]}},{"name":"profession","in":"query","required":false,"description":"직군","schema":{"type":"string","enum":["doctor","dentist","korean_medicine","nurse","pharmacist","allied_health","industry","other"]}},{"name":"specialty","in":"query","required":false,"description":"전문과목","schema":{"type":"string","enum":["혈액종양내과","류마티스내과","소화기내과","순환기내과","호흡기내과","내분비내과","감염내과","신장내과","알레르기내과","정신건강의학과","마취통증의학과","방사선종양학과","진단검사의학과","직업환경의학과","소아청소년과","가정의학과","재활의학과","응급의학과","영상의학과","예방의학과","이비인후과","비뇨의학과","산부인과","정형외과","신경외과","성형외과","흉부외과","핵의학과","피부과","신경과","병리과","안과","내과","외과"]}},{"name":"sort","in":"query","required":false,"description":"정렬","schema":{"type":"string","enum":["recent","deadline"],"default":"recent"}},{"name":"include_closed","in":"query","required":false,"description":"마감 공고 포함","schema":{"type":"boolean","default":false}},{"name":"limit","in":"query","required":false,"description":"결과 수","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"integer"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Post"}}}}}}},"429":{"description":"키 없는 요청의 분당 한도 초과(또는 키의 일일 쿼터 초과)"}}}},"/api/jobs/facets":{"get":{"operationId":"jobFacets","summary":"모집 중 공고의 지역·직군·전문과목 분포","tags":["Jobs"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/societies":{"get":{"operationId":"listSocieties","summary":"학회·의료 단체 공식 계정","tags":["Societies"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"societies":{"type":"array","items":{"$ref":"#/components/schemas/Society"}}}}}}},"429":{"description":"키 없는 요청의 분당 한도 초과(또는 키의 일일 쿼터 초과)"}}}},"/api/societies/{id}/posts":{"get":{"operationId":"getSocietyPosts","summary":"학회 공지(최신순)","tags":["Societies"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"결과 수","schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"society":{"$ref":"#/components/schemas/Society"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Post"}},"total":{"type":"integer"}}}}}},"404":{"description":"학회 계정이 아님"},"429":{"description":"키 없는 요청의 분당 한도 초과(또는 키의 일일 쿼터 초과)"}}}},"/feed.xml":{"get":{"operationId":"rssFeed","summary":"RSS 2.0 피드","tags":["Feeds"],"parameters":[{"name":"type","in":"query","required":false,"description":"게시물 유형","schema":{"type":"string","enum":["discussion","case_study","research","job","medical_dispute"]}},{"name":"tag","in":"query","required":false,"description":"해시태그","schema":{"type":"string"}},{"name":"author","in":"query","required":false,"description":"학회 공식 계정 ID(학회 피드)","schema":{"type":"integer"}}],"responses":{"200":{"description":"RSS","content":{"application/rss+xml":{"schema":{"type":"string"}}}}}}}}}