{"openapi":"3.0.3","info":{"title":"Tabular CSV/JSON RAG Sanitizer & Formula-Injection Firewall API","version":"1.0.0","description":"Cleans messy CSV, TSV, and JSON tables for AI and RAG ingestion: neutralizes spreadsheet formula injection (=cmd|...), masks cell PII, flags indirect prompt injections, and outputs Markdown tables and row-level semantic chunks."},"servers":[{"url":"https://api.tinplate.dev","description":"Production Edge Gateway"}],"components":{"schemas":{"TabularRagCleanerResponseData":{"type":"object","properties":{"safe":{"type":"boolean","example":false},"verdict":{"type":"string","enum":["clean","sanitized","block"],"example":"sanitized"},"headers":{"type":"array","items":{"type":"string"},"example":["customer_id","email","amount","notes"]},"row_count":{"type":"integer","minimum":0,"example":2},"column_count":{"type":"integer","minimum":0,"example":4},"clean_markdown_table":{"type":"string","example":"| customer_id | email | amount | notes |\n| --- | --- | --- | --- |\n| 101 | [PII_EMAIL_1] | 249.50 | Standard Enterprise renewal |\n| 102 | [PII_EMAIL_2] | -15.00 | '=cmd\\|' /C calc'!A0 |"},"row_chunks":{"type":"array","items":{"type":"string"},"example":["Row 1: customer_id: 101 | email: [PII_EMAIL_1] | amount: 249.50 | notes: Standard Enterprise renewal","Row 2: customer_id: 102 | email: [PII_EMAIL_2] | amount: -15.00 | notes: '=cmd|' /C calc'!A0"]},"clean_rows":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}}},"stats":{"type":"object","properties":{"formulas_neutralized":{"type":"integer","minimum":0,"example":1},"pii_cells_redacted":{"type":"integer","minimum":0,"example":2},"injection_cells_flagged":{"type":"integer","minimum":0,"example":0}},"required":["formulas_neutralized","pii_cells_redacted","injection_cells_flagged"]},"findings":{"type":"array","items":{"type":"object","properties":{"row_index":{"type":"integer","minimum":0,"example":1},"column":{"type":"string","example":"notes"},"kind":{"type":"string","enum":["formula_injection","prompt_injection","pii_redacted"],"example":"formula_injection"},"severity":{"type":"string","enum":["low","medium","high","critical"],"example":"critical"},"detail":{"type":"string","example":"Neutralized dangerous spreadsheet formula (=cmd|...) in column 'notes'."}},"required":["row_index","column","kind","severity","detail"]}}},"required":["safe","verdict","headers","row_count","column_count","clean_markdown_table","row_chunks","clean_rows","stats","findings"]},"TabularRagCleanerRequest":{"type":"object","properties":{"csv":{"type":"string","minLength":1,"maxLength":262144,"example":"customer_id,email,amount,notes\n101,alice@tinplate.dev,249.50,Standard Enterprise renewal\n102,bob@example.com,-15.00,\"=cmd|' /C calc'!A0\"","description":"Raw CSV, TSV, or semicolon-delimited table text."},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"nullable":true}},"minItems":1,"maxItems":1000,"description":"Optional structured JSON array of row objects instead of raw CSV text."},"delimiter":{"type":"string","enum":["auto",",",";","\t","|"],"default":"auto","example":"auto","description":"Column delimiter for raw text input (default 'auto')."},"sanitize_formulas":{"type":"boolean","default":true,"example":true,"description":"Neutralize CSV/spreadsheet formula injection payloads (=, +, -, @, DDE commands) by prefixing an apostrophe."},"redact_pii":{"type":"boolean","default":true,"example":true,"description":"Redact PII (emails, phones, IBANs, credit cards, national IDs) inside cells."},"check_prompt_injection":{"type":"boolean","default":true,"example":true,"description":"Scan cells for indirect prompt-injection instructions hidden in table data."}}},"ResponseMeta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid"},"ms":{"type":"integer","minimum":0},"version":{"type":"string","example":"1.0.0"}}},"ErrorEnvelope":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"invalid_input"},"message":{"type":"string","example":"Request body failed validation"}}},"meta":{"$ref":"#/components/schemas/ResponseMeta"}}}},"parameters":{}},"paths":{"/v1/tabular-rag-cleaner":{"post":{"tags":["38_TABULAR_RAG_CLEANER"],"summary":"Sanitize CSV, TSV, and JSON tables for RAG pipelines: neutralize formula injection, redact PII, detect indirect prompt injection, and emit Markdown tables + row chunks","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TabularRagCleanerRequest"}}}},"responses":{"200":{"description":"Sanitized Markdown table, row-level RAG chunks, and cell security findings","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/TabularRagCleanerResponseData"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["ok","data","meta"]}}}},"400":{"description":"Invalid input or malformed JSON request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid authentication credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request payload exceeds subscribed plan byte cap","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}}}