{"openapi":"3.1.0","info":{"title":"CSV Normalize and Validate API","version":"1.0.0","description":"Parse, normalize, validate, and profile bounded CSV text for agents and integrations. Payloads are not stored, files are not fetched, formulas are never executed, and row, column, cell, output, and regular-expression limits are enforced."},"paths":{"/marketplace/rapid/csv/v1/parse":{"post":{"tags":["CSV Parse"],"summary":"Parse CSV into structured rows","description":"Parse bounded CSV, TSV, semicolon, or pipe-delimited text without fetching or storing a file.","operationId":"parseCsv","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSVParseRequest"},"examples":{"example":{"summary":"Parse CSV into structured rows","value":{"text":"customer,amount,active\nAda,125.50,true\nLin,80.00,false\n","delimiter":"AUTO","header_mode":"PRESENT"}}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSVParseResponse"},"example":{"status":"COMPLETED","decision":"CLEAR","dialect":{"delimiter":"COMMA","delimiter_character":",","header_mode":"PRESENT","newline_style":"LF","had_utf8_bom":false},"headers":["customer","amount","active"],"rows":[{"customer":"Ada","amount":"125.50","active":"true"},{"customer":"Lin","amount":"80.00","active":"false"}],"row_count":2,"column_count":3,"source_sha256":"0000000000000000000000000000000000000000000000000000000000000000","issue_count":0,"issues_returned":0,"issues_truncated":false,"issues":[],"warnings":[],"next_action":"Use the parsed rows."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketplace/rapid/csv/v1/normalize":{"post":{"tags":["CSV Normalize"],"summary":"Normalize CSV deterministically","description":"Normalize delimiter, line endings, whitespace, and unique header names while flagging formula-like cells.","operationId":"normalizeCsv","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSVNormalizeRequest"},"examples":{"example":{"summary":"Normalize CSV deterministically","value":{"text":"Customer Name;Invoice Total\r\nAda;125.50\r\n","delimiter":"SEMICOLON","header_mode":"PRESENT","header_style":"SNAKE_CASE","formula_policy":"FLAG"}}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSVNormalizeResponse"},"example":{"status":"COMPLETED","decision":"CLEAR","dialect":{"delimiter":"COMMA","delimiter_character":",","header_mode":"PRESENT","newline_style":"LF","had_utf8_bom":false},"headers":["customer_name","invoice_total"],"normalized_csv":"customer_name,invoice_total\nAda,125.50\n","row_count":1,"column_count":2,"source_sha256":"1111111111111111111111111111111111111111111111111111111111111111","normalized_sha256":"2222222222222222222222222222222222222222222222222222222222222222","issue_count":2,"issues_returned":2,"issues_truncated":false,"issues":[{"code":"CSV_HEADER_NORMALIZED","severity":"INFO","message":"A header was normalized to a deterministic unique name.","next_action":"Use the returned header mapping in downstream field references.","column":"Customer Name","evidence":{"original":"Customer Name","normalized":"customer_name"}},{"code":"CSV_HEADER_NORMALIZED","severity":"INFO","message":"A header was normalized to a deterministic unique name.","next_action":"Use the returned header mapping in downstream field references.","column":"Invoice Total","evidence":{"original":"Invoice Total","normalized":"invoice_total"}}],"warnings":[],"next_action":"Use the normalized CSV and returned header names."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketplace/rapid/csv/v1/validate":{"post":{"tags":["CSV Validate"],"summary":"Validate CSV against column rules","description":"Validate required columns, types, nulls, uniqueness, ranges, allowlists, and bounded patterns with row-level issues.","operationId":"validateCsv","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSVValidateRequest"},"examples":{"example":{"summary":"Validate CSV against column rules","value":{"text":"customer,amount,active\nAda,125.50,true\n","columns":[{"name":"customer","value_type":"STRING","required":true},{"name":"amount","value_type":"NUMBER","minimum":0},{"name":"active","value_type":"BOOLEAN"}],"additional_columns":"FORBID"}}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSVValidateResponse"},"example":{"status":"COMPLETED","valid":true,"decision":"CLEAR","dialect":{"delimiter":"COMMA","delimiter_character":",","header_mode":"PRESENT","newline_style":"LF","had_utf8_bom":false},"row_count":1,"column_count":3,"valid_row_count":1,"invalid_row_count":0,"issue_count":0,"issues_returned":0,"issues_truncated":false,"issues":[],"source_sha256":"3333333333333333333333333333333333333333333333333333333333333333","next_action":"The CSV satisfies the supplied column rules."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketplace/rapid/csv/v1/profile":{"post":{"tags":["CSV Profile"],"summary":"Profile CSV columns","description":"Return bounded completeness, uniqueness, syntax-type, length, and formula-candidate counts. Samples are opt-in and truncated.","operationId":"profileCsv","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSVProfileRequest"},"examples":{"example":{"summary":"Profile CSV columns","value":{"text":"customer,amount,active\nAda,125.50,true\nLin,80.00,false\n","include_samples":false}}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSVProfileResponse"},"example":{"status":"COMPLETED","decision":"CLEAR","dialect":{"delimiter":"COMMA","delimiter_character":",","header_mode":"PRESENT","newline_style":"LF","had_utf8_bom":false},"row_count":2,"column_count":3,"columns":[{"name":"customer","non_empty_count":2,"empty_count":0,"unique_count":2,"duplicate_value_count":0,"min_length":3,"max_length":3,"inferred_type_counts":{"STRING":2},"formula_candidate_count":0,"samples":[]}],"source_sha256":"4444444444444444444444444444444444444444444444444444444444444444","warnings":["Type counts are syntax observations, not business-schema validation."],"next_action":"Use the profile to define explicit column validation rules."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"CSVColumnProfile":{"properties":{"name":{"type":"string","title":"Name"},"non_empty_count":{"type":"integer","title":"Non Empty Count"},"empty_count":{"type":"integer","title":"Empty Count"},"unique_count":{"type":"integer","title":"Unique Count"},"duplicate_value_count":{"type":"integer","title":"Duplicate Value Count"},"min_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Length"},"max_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Length"},"inferred_type_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Inferred Type Counts"},"formula_candidate_count":{"type":"integer","title":"Formula Candidate Count"},"samples":{"items":{"type":"string"},"type":"array","title":"Samples"}},"additionalProperties":false,"type":"object","required":["name","non_empty_count","empty_count","unique_count","duplicate_value_count","min_length","max_length","inferred_type_counts","formula_candidate_count","samples"],"title":"CSVColumnProfile"},"CSVColumnRule":{"properties":{"name":{"type":"string","maxLength":256,"minLength":1,"title":"Name"},"value_type":{"type":"string","enum":["STRING","INTEGER","NUMBER","BOOLEAN","DATE","DATETIME","UUID","EMAIL_SYNTAX"],"title":"Value Type","default":"STRING"},"required":{"type":"boolean","title":"Required","default":true},"nullable":{"type":"boolean","title":"Nullable","default":false},"unique":{"type":"boolean","title":"Unique","default":false},"min_length":{"anyOf":[{"type":"integer","maximum":65536.0,"minimum":0.0},{"type":"null"}],"title":"Min Length"},"max_length":{"anyOf":[{"type":"integer","maximum":65536.0,"minimum":0.0},{"type":"null"}],"title":"Max Length"},"minimum":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Minimum"},"maximum":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Maximum"},"pattern":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Pattern"},"allowed_values":{"items":{"type":"string"},"type":"array","maxItems":100,"title":"Allowed Values"}},"additionalProperties":false,"type":"object","required":["name"],"title":"CSVColumnRule"},"CSVDialectInfo":{"properties":{"delimiter":{"type":"string","enum":["COMMA","TAB","SEMICOLON","PIPE"],"title":"Delimiter"},"delimiter_character":{"type":"string","title":"Delimiter Character"},"header_mode":{"type":"string","enum":["PRESENT","ABSENT"],"title":"Header Mode"},"newline_style":{"type":"string","enum":["LF","CRLF","CR","MIXED","NONE"],"title":"Newline Style"},"had_utf8_bom":{"type":"boolean","title":"Had Utf8 Bom"}},"additionalProperties":false,"type":"object","required":["delimiter","delimiter_character","header_mode","newline_style","had_utf8_bom"],"title":"CSVDialectInfo"},"CSVIssue":{"properties":{"code":{"type":"string","title":"Code"},"severity":{"type":"string","enum":["INFO","LOW","MEDIUM","HIGH"],"title":"Severity"},"message":{"type":"string","title":"Message"},"next_action":{"type":"string","title":"Next Action"},"row_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Row Number"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"value_preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Preview"},"evidence":{"additionalProperties":true,"type":"object","title":"Evidence"}},"additionalProperties":false,"type":"object","required":["code","severity","message","next_action"],"title":"CSVIssue"},"CSVNormalizeRequest":{"properties":{"delimiter":{"type":"string","enum":["AUTO","COMMA","TAB","SEMICOLON","PIPE"],"title":"Delimiter","default":"AUTO"},"header_mode":{"type":"string","enum":["PRESENT","ABSENT"],"title":"Header Mode","default":"PRESENT"},"trim_whitespace":{"type":"boolean","title":"Trim Whitespace","default":true},"skip_blank_rows":{"type":"boolean","title":"Skip Blank Rows","default":true},"text":{"type":"string","maxLength":524288,"minLength":1,"title":"Text"},"output_delimiter":{"type":"string","enum":["COMMA","TAB","SEMICOLON","PIPE"],"title":"Output Delimiter","default":"COMMA"},"header_style":{"type":"string","enum":["PRESERVE","LOWERCASE","SNAKE_CASE"],"title":"Header Style","default":"SNAKE_CASE"},"formula_policy":{"type":"string","enum":["FLAG","ESCAPE","ALLOW"],"title":"Formula Policy","default":"FLAG"},"max_rows":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Max Rows","default":10000},"max_issues":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Max Issues","default":100}},"additionalProperties":false,"type":"object","required":["text"],"title":"CSVNormalizeRequest"},"CSVNormalizeResponse":{"properties":{"status":{"type":"string","const":"COMPLETED","title":"Status","default":"COMPLETED"},"decision":{"type":"string","enum":["CLEAR","REVIEW_REQUIRED"],"title":"Decision"},"dialect":{"$ref":"#/components/schemas/CSVDialectInfo"},"headers":{"items":{"type":"string"},"type":"array","title":"Headers"},"normalized_csv":{"type":"string","title":"Normalized Csv"},"row_count":{"type":"integer","title":"Row Count"},"column_count":{"type":"integer","title":"Column Count"},"source_sha256":{"type":"string","title":"Source Sha256"},"normalized_sha256":{"type":"string","title":"Normalized Sha256"},"issue_count":{"type":"integer","title":"Issue Count"},"issues_returned":{"type":"integer","title":"Issues Returned"},"issues_truncated":{"type":"boolean","title":"Issues Truncated"},"issues":{"items":{"$ref":"#/components/schemas/CSVIssue"},"type":"array","title":"Issues"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"next_action":{"type":"string","title":"Next Action"}},"additionalProperties":false,"type":"object","required":["decision","dialect","headers","normalized_csv","row_count","column_count","source_sha256","normalized_sha256","issue_count","issues_returned","issues_truncated","issues","warnings","next_action"],"title":"CSVNormalizeResponse"},"CSVParseRequest":{"properties":{"delimiter":{"type":"string","enum":["AUTO","COMMA","TAB","SEMICOLON","PIPE"],"title":"Delimiter","default":"AUTO"},"header_mode":{"type":"string","enum":["PRESENT","ABSENT"],"title":"Header Mode","default":"PRESENT"},"trim_whitespace":{"type":"boolean","title":"Trim Whitespace","default":true},"skip_blank_rows":{"type":"boolean","title":"Skip Blank Rows","default":true},"text":{"type":"string","maxLength":524288,"minLength":1,"title":"Text"},"max_rows":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Max Rows","default":10000},"max_issues":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Max Issues","default":100}},"additionalProperties":false,"type":"object","required":["text"],"title":"CSVParseRequest"},"CSVParseResponse":{"properties":{"status":{"type":"string","const":"COMPLETED","title":"Status","default":"COMPLETED"},"decision":{"type":"string","enum":["CLEAR","REVIEW_REQUIRED"],"title":"Decision"},"dialect":{"$ref":"#/components/schemas/CSVDialectInfo"},"headers":{"items":{"type":"string"},"type":"array","title":"Headers"},"rows":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Rows"},"row_count":{"type":"integer","title":"Row Count"},"column_count":{"type":"integer","title":"Column Count"},"source_sha256":{"type":"string","title":"Source Sha256"},"issue_count":{"type":"integer","title":"Issue Count"},"issues_returned":{"type":"integer","title":"Issues Returned"},"issues_truncated":{"type":"boolean","title":"Issues Truncated"},"issues":{"items":{"$ref":"#/components/schemas/CSVIssue"},"type":"array","title":"Issues"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"next_action":{"type":"string","title":"Next Action"}},"additionalProperties":false,"type":"object","required":["decision","dialect","headers","rows","row_count","column_count","source_sha256","issue_count","issues_returned","issues_truncated","issues","warnings","next_action"],"title":"CSVParseResponse"},"CSVProfileRequest":{"properties":{"delimiter":{"type":"string","enum":["AUTO","COMMA","TAB","SEMICOLON","PIPE"],"title":"Delimiter","default":"AUTO"},"header_mode":{"type":"string","enum":["PRESENT","ABSENT"],"title":"Header Mode","default":"PRESENT"},"trim_whitespace":{"type":"boolean","title":"Trim Whitespace","default":true},"skip_blank_rows":{"type":"boolean","title":"Skip Blank Rows","default":true},"text":{"type":"string","maxLength":524288,"minLength":1,"title":"Text"},"include_samples":{"type":"boolean","title":"Include Samples","default":false},"max_rows":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Max Rows","default":10000}},"additionalProperties":false,"type":"object","required":["text"],"title":"CSVProfileRequest"},"CSVProfileResponse":{"properties":{"status":{"type":"string","const":"COMPLETED","title":"Status","default":"COMPLETED"},"decision":{"type":"string","enum":["CLEAR","REVIEW_REQUIRED"],"title":"Decision"},"dialect":{"$ref":"#/components/schemas/CSVDialectInfo"},"row_count":{"type":"integer","title":"Row Count"},"column_count":{"type":"integer","title":"Column Count"},"columns":{"items":{"$ref":"#/components/schemas/CSVColumnProfile"},"type":"array","title":"Columns"},"source_sha256":{"type":"string","title":"Source Sha256"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"next_action":{"type":"string","title":"Next Action"}},"additionalProperties":false,"type":"object","required":["decision","dialect","row_count","column_count","columns","source_sha256","warnings","next_action"],"title":"CSVProfileResponse"},"CSVValidateRequest":{"properties":{"text":{"type":"string","maxLength":524288,"minLength":1,"title":"Text"},"delimiter":{"type":"string","enum":["AUTO","COMMA","TAB","SEMICOLON","PIPE"],"title":"Delimiter","default":"AUTO"},"trim_whitespace":{"type":"boolean","title":"Trim Whitespace","default":true},"skip_blank_rows":{"type":"boolean","title":"Skip Blank Rows","default":true},"columns":{"items":{"$ref":"#/components/schemas/CSVColumnRule"},"type":"array","maxItems":256,"minItems":1,"title":"Columns"},"additional_columns":{"type":"string","enum":["ALLOW","FLAG","FORBID"],"title":"Additional Columns","default":"FLAG"},"formula_policy":{"type":"string","enum":["FLAG","ALLOW"],"title":"Formula Policy","default":"FLAG"},"max_rows":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Max Rows","default":10000},"max_errors":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Max Errors","default":100}},"additionalProperties":false,"type":"object","required":["text","columns"],"title":"CSVValidateRequest"},"CSVValidateResponse":{"properties":{"status":{"type":"string","const":"COMPLETED","title":"Status","default":"COMPLETED"},"valid":{"type":"boolean","title":"Valid"},"decision":{"type":"string","enum":["CLEAR","REVIEW_REQUIRED"],"title":"Decision"},"dialect":{"$ref":"#/components/schemas/CSVDialectInfo"},"row_count":{"type":"integer","title":"Row Count"},"column_count":{"type":"integer","title":"Column Count"},"valid_row_count":{"type":"integer","title":"Valid Row Count"},"invalid_row_count":{"type":"integer","title":"Invalid Row Count"},"issue_count":{"type":"integer","title":"Issue Count"},"issues_returned":{"type":"integer","title":"Issues Returned"},"issues_truncated":{"type":"boolean","title":"Issues Truncated"},"issues":{"items":{"$ref":"#/components/schemas/CSVIssue"},"type":"array","title":"Issues"},"source_sha256":{"type":"string","title":"Source Sha256"},"next_action":{"type":"string","title":"Next Action"}},"additionalProperties":false,"type":"object","required":["valid","decision","dialect","row_count","column_count","valid_row_count","invalid_row_count","issue_count","issues_returned","issues_truncated","issues","source_sha256","next_action"],"title":"CSVValidateResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"tags":[{"name":"CSV Parse","description":"A bounded, stateless CSV utility designed for data imports, API integrations, and AI agents."},{"name":"CSV Normalize","description":"A bounded, stateless CSV utility designed for data imports, API integrations, and AI agents."},{"name":"CSV Validate","description":"A bounded, stateless CSV utility designed for data imports, API integrations, and AI agents."},{"name":"CSV Profile","description":"A bounded, stateless CSV utility designed for data imports, API integrations, and AI agents."}],"servers":[{"url":"https://api-production-9502.up.railway.app"}]}