{"openapi":"3.0.3","info":{"title":"AI Club Kordoc API","version":"1.0.0","description":"Kordoc document processing API for HWP/HWPX/PDF/images, OCR, RAG chunks, forms, document generation, patching, rendering, validation, seals and redaction."},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{}},"paths":{"/":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/health":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/version":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/openapi.json":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/v1/detect":{"post":{"summary":"Detect document format","tags":["Parse"],"description":"Detect document format without fully parsing it.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"Input document"}}}}}}}},"/v1/parse":{"post":{"summary":"Parse document","tags":["Parse"],"description":"Parse a Kordoc-supported document. OCR supports false, true and force.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"Input document"},"ocr":{"type":"string","enum":["false","true","force"],"default":"false","description":"false=disable OCR; true=OCR pages that need recognition; force=OCR every page"},"includeBlocks":{"type":"string","enum":["true","false"],"default":"true","description":"Return blocks in parse response"}}}}}}}},"/v1/metadata":{"post":{"summary":"Extract document metadata","tags":["Parse"],"description":"Parse a document and return metadata and quality information without blocks.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"Input document"},"ocr":{"type":"string","enum":["false","true","force"],"default":"false","description":"false=disable OCR; true=OCR pages that need recognition; force=OCR every page"},"includeBlocks":{"type":"string","enum":["true","false"],"default":"true","description":"Return blocks in parse response"}}}}}}}},"/v1/parse/pages":{"post":{"summary":"Parse document by page","tags":["Parse"],"description":"Return page-level Markdown representation.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"Input document"},"ocr":{"type":"string","enum":["false","true","force"],"default":"false","description":"false=disable OCR; true=OCR pages that need recognition; force=OCR every page"},"includeBlocks":{"type":"string","enum":["true","false"],"default":"true","description":"Return blocks in parse response"}}}}}}}},"/v1/parse/chunks":{"post":{"summary":"Create RAG chunks","tags":["RAG"],"description":"Convert parsed Kordoc blocks into section or block granularity chunks.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"Input document"},"ocr":{"type":"string","enum":["false","true","force"],"default":"false","description":"false=disable OCR; true=OCR pages that need recognition; force=OCR every page"},"granularity":{"type":"string","enum":["section","block"],"default":"section"},"includeTableCells":{"type":"string","enum":["true","false"],"default":"false","description":"Include table cell values in chunk metadata"}}}}}}}},"/v1/parse/table":{"post":{"summary":"Extract tables","tags":["Parse"],"description":"Parse the document and return table blocks.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"Input document"},"ocr":{"type":"string","enum":["false","true","force"],"default":"false","description":"false=disable OCR; true=OCR pages that need recognition; force=OCR every page"}}}}}}}},"/v1/compare":{"post":{"summary":"Compare two documents","tags":["Compare"],"description":"Parse two documents and return Kordoc block differences.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["fileA","fileB"],"properties":{"fileA":{"type":"string","format":"binary","description":"Original / first document"},"fileB":{"type":"string","format":"binary","description":"Compared / second document"},"ocr":{"type":"string","enum":["false","true","force"],"default":"false","description":"false=disable OCR; true=OCR pages that need recognition; force=OCR every page"}}}}}}}},"/v1/form/parse":{"post":{"summary":"Detect form fields","tags":["Form"],"description":"Parse a document and infer form fields and schema.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"Input document"}}}}}}}},"/v1/form/fill":{"post":{"summary":"Fill document form","tags":["Form"],"description":"Fill detected form fields and return Markdown or generated HWPX.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["values"],"properties":{"file":{"type":"string","format":"binary","description":"Input document. Either file or template is required."},"template":{"type":"string","enum":["gian","gian-simple","일반기안문","간이기안문"],"description":"Built-in government form template. Use instead of file."},"values":{"type":"string","description":"JSON object of form values, e.g. {\"성명\":\"홍길동\"}"},"formats":{"type":"string","description":"Optional JSON object mapping field labels to formats, e.g. {\"전화번호\":\"phone:hyphen\"}"},"requireUnique":{"type":"string","enum":["true","false"],"default":"false","description":"When true, fields are not filled when a label matches multiple locations. Ambiguous labels are returned in unmatched."},"maskValues":{"type":"string","enum":["true","false"],"default":"false","description":"Do not expose filled values in API response metadata or Markdown preview."},"outputFormat":{"type":"string","enum":["markdown","hwpx","hwpx-preserve"],"default":"markdown"}},"anyOf":[{"required":["file"]},{"required":["template"]}]}}}}}},"/v1/document/patch":{"post":{"summary":"Patch HWP/HWPX","tags":["Document"],"description":"Patch an existing HWP or HWPX using edited Markdown.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file","markdown"],"properties":{"file":{"type":"string","format":"binary","description":"Input document"},"markdown":{"type":"string","description":"Edited Markdown content"},"options":{"type":"string","description":"Optional JSON options"}}}}}}}},"/v1/document/profile/extract":{"post":{"summary":"Extract HWPX format profile","tags":["Document"],"description":"Extract table border, shading, column width and cell font profile from a reference HWPX.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"Reference HWPX document"}}}}}}}},"/v1/document/generate/hwpx":{"post":{"summary":"Generate HWPX from Markdown","tags":["Document"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["markdown"],"properties":{"markdown":{"type":"string","description":"Markdown source used to generate the HWPX document"},"options":{"type":"object","additionalProperties":true,"description":"Optional Kordoc markdownToHwpx options"}}},"example":{"markdown":"# AI Club Kordoc\n\n한글 HWPX 생성 예제입니다.","options":{}}}}}}},"/v1/document/generate/pdf":{"post":{"summary":"Generate PDF from Markdown","tags":["Document"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["markdown"],"properties":{"markdown":{"type":"string","description":"Markdown source used to generate the PDF document"},"options":{"type":"object","additionalProperties":true,"description":"Optional Kordoc markdownToPdf options"}}},"example":{"markdown":"# AI Club Kordoc\n\n한글 PDF 생성 예제입니다.","options":{}}}}}}},"/v1/document/render":{"post":{"summary":"Render HWPX to SVG","tags":["Document"],"description":"Render an HWPX document using Kordoc's SVG renderer. For HWPX files without Hancom linesegarray layout cache, pass options={\"reflow\":true}. Kordoc-generated HWPX normally requires reflow=true.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"HWPX document"},"options":{"type":"string","description":"Optional JSON render options. Use {\"reflow\":true} when the HWPX has no Hancom linesegarray layout cache."}}}}}}}},"/v1/document/validate":{"post":{"summary":"Validate HWPX","tags":["Document"],"description":"Validate HWPX ZIP structure and XML consistency.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"HWPX document"}}}}}}}},"/v1/document/seal":{"post":{"summary":"Place seal into HWPX","tags":["Document"],"description":"Place an uploaded seal image at one or more anchor positions in an HWPX.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file","image","ops"],"properties":{"file":{"type":"string","format":"binary","description":"HWPX document"},"image":{"type":"string","format":"binary","description":"Seal image"},"ops":{"type":"string","description":"JSON array of seal operations. Each operation requires anchor; uploaded image is injected as image."}}}}}}}},"/v1/document/redact":{"post":{"summary":"Redact sensitive values from a document","tags":["Redaction"],"description":"Detect sensitive values and preserve HWP/HWPX formatting when possible.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"Input document"},"rules":{"type":"string","description":"Optional JSON array of redaction rules, e.g. [\"rrn\",\"phone\",\"email\"]"},"maskChar":{"type":"string","description":"Optional single masking character. Default is Kordoc default."},"dryRun":{"type":"string","enum":["true","false"],"default":"false","description":"Detect and report redactions without changing document bytes."}}}}}}}},"/v1/document/redact/text":{"post":{"summary":"Redact sensitive values from plain text","tags":["Redaction"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"Plain text to redact"},"options":{"type":"object","additionalProperties":true,"description":"Optional Kordoc redactText options"}}},"example":{"text":"이메일 test@example.com, 전화 010-1234-5678","options":{}}}}}}},"/v1/document/redact/markdown":{"post":{"summary":"Redact sensitive values from Markdown","tags":["Redaction"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["markdown"],"properties":{"markdown":{"type":"string","description":"Markdown text to redact while preserving Markdown structure"},"options":{"type":"object","additionalProperties":true,"description":"Optional Kordoc redactMarkdown options"}}},"example":{"markdown":"# 개인정보\n\n이메일: test@example.com\n\n전화: 010-1234-5678","options":{}}}}}}}}}