{"slug":"csv-validator-mekler-ai-v1-accept-csv-2e6229","title":"Validate CSV before import using a fixed JSON column specification","host":"csv-validator.mekler.ai","method":"POST","resource":"https://csv-validator.mekler.ai/v1/accept/csv","category":"other","description":"Validate CSV before import using a fixed JSON column specification. Checks missing/extra columns, required cells, string/integer/decimal/boolean/date types, uniqueness, allowed values and numeric/row-count bounds. Returns pass/fail with row/column error codes. POST JSON with csv and spec.columns; sc","price_listed":null,"price_asked":null,"state":"answering","state_label":"Answering","checks_7d":1,"answered_7d":1,"latency_ms_median":821,"reported_calls_30d":1,"reported_payers_30d":1,"networks":["solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"],"badge":"unverified","paid_checks_7d":0,"paid_ok_7d":0,"example_input":{"body":{"csv":"id,amount\na,12.50\na,-2.00\n","spec":{"columns":[{"name":"id","required":true,"type":"string","unique":true},{"max":"100","min":"0","name":"amount","required":true,"type":"decimal"}],"min_rows":1}},"bodyType":"json","method":"POST","type":"http"},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"additionalProperties":false,"properties":{"body":{"additionalProperties":false,"properties":{"csv":{"description":"UTF-8 comma-delimited CSV with header. No trimming. Data record numbers start at 1; quoted newlines are one record.","type":"string"},"spec":{"additionalProperties":false,"properties":{"allow_extra_columns":{"default":false,"description":"If false, reject CSV headers not named in columns.","type":"boolean"},"columns":{"description":"Fixed built-in checks. Every named column must exist, even when required is false.","items":{"additionalProperties":false,"properties":{"enum":{"description":"Exact allowed cell strings, compared without trimming or normalization.","items":{"maxLength":1000,"type":"string"},"maxItems":100,"minItems":1,"type":"array"},"max":{"description":"Inclusive numeric bound; allowed only for integer or decimal columns.","oneOf":[{"type":"number"},{"type":"string"}]},"min":{"description":"Inclusive numeric bound; allowed only for integer or decimal columns.","oneOf":[{"type":"number"},{"type":"string"}]},"name":{"maxLength":100,"minLength":1,"type":"string"},"required":{"default":false,"description":"Reject empty cells. Whitespace is not trimmed.","type":"boolean"},"type":{"description":"string: literal text; integer: base-10, no plus sign or leading zeros; decimal: plain decimal, no exponent; boolean: lowercase true/false; date: valid YYYY-MM-DD.","enum":["string","integer","decimal","boolean","date"],"type":"string"},"unique":{"default":false,"description":"Reject repeated nonempty values within this column; numeric values compare numerically.","type":"boolean"}},"required":["name","type"],"type":"object"},"maxItems":50,"minItems":1,"type":"array"},"max_rows":{"default":2000,"maximum":2000,"minimum":0,"type":"integer"},"min_rows":{"default":0,"maximum":2000,"minimum":0,"type":"integer"}},"required":["columns"],"type":"object"}},"required":["csv","spec"],"type":"object"},"bodyType":{"enum":["json","form-data","text"],"type":"string"},"method":{"enum":["POST","PUT","PATCH"],"type":"string"},"type":{"const":"http","type":"string"}},"required":["type","method","bodyType","body"],"type":"object"},"output":{"properties":{"example":{"properties":{"boundary":{"type":"string"},"failure_count":{"minimum":0,"type":"integer"},"failures":{"items":{"properties":{"code":{"enum":["missing_column","extra_columns","row_width","required","type","min","max","enum","unique","min_rows","max_rows"],"type":"string"},"column":{"description":"Column name, or null when the error applies to the row or file.","type":["string","null"]},"row":{"description":"One-based data record, excluding header; null for file/header errors.","type":["integer","null"]}},"required":["code","row","column"],"type":"object"},"maxItems":50,"type":"array"},"failures_truncated":{"type":"boolean"},"receipt_sha256":{"pattern":"^[0-9a-f]{64}$","type":"string"},"rows_checked":{"minimum":0,"type":"integer"},"schema_version":{"enum":[1],"type":"integer"},"verdict":{"enum":["pass","fail"],"type":"string"}},"required":["schema_version","verdict","rows_checked","failure_count","failures","failures_truncated","receipt_sha256","boundary"],"type":"object"},"type":{"type":"string"}},"required":["type"],"type":"object"}},"required":["input"],"type":"object"},"history":[{"day":"2026-10-01","reachable":true,"status":402,"valid_402":true,"asked_usdc":null,"price_match":null,"latency_ms":821,"error":null}],"description_full":"Validate CSV before import using a fixed JSON column specification. Checks missing/extra columns, required cells, string/integer/decimal/boolean/date types, uniqueness, allowed values and numeric/row-count bounds. Returns pass/fail with row/column error codes. POST JSON with csv and spec.columns; schemas/examples attached. Full contract: /openapi.json. Max 2,000 rows, 50 columns, 256 KiB; first 50 failures. No formulas, cross-column rules, fact checking or data repair.","last_updated":"2026-10-01T01:27:16.776Z","schemes":["exact"]}