tablint

A pay-per-call preflight check for spreadsheets, built for agents.

price $0.02 per file network Base mainnet paid via x402 (USDC) no accounts, no API keys

Before an agent ingests an unfamiliar CSV or XLSX, it can ask tablint whether the file is safe to load and what is structurally wrong with it. tablint returns a machine verdict: a clean/needs-cleaning/reject call, the blocking problems, per-sheet structure, and per-column types. Payment happens inline over HTTP via the x402 protocol, so there is nothing to sign up for.

How to call it

1POST the URL of a file to the endpoint. With no payment, you get an HTTP 402 with the price.
2An x402 client signs a USDC payment authorization and retries automatically.
3tablint downloads the file, analyzes it, and returns the verdict. You are charged only on success.

Endpoint

POST https://tablint.dev/v1/table/preflight
Content-Type: application/json

{ "file_url": "https://example.com/data.csv", "checks": ["all"] }

Any x402 client library handles the 402 -> pay -> retry flow. For example, with the Python SDK:

pip install "x402[evm,requests]" eth-account requests

A reference buyer client is in the x402gate repo under tools/buyer.py.

What you get back

{
  "verdict": "clean | needs_cleaning | needs_review | reject | not_a_table",
  "recommended_action": "ingest_directly | clean_then_ingest | split_tables_then_ingest | review | reject",
  "confidence": 0.0,
  "blocking_conditions": [],
  "warnings": [],
  "sheets":  [ { "name", "hidden", "used_range", "header_row_index",
              "multiple_tables_detected", "merged_cells", "formula_cells", ... } ],
  "columns": [ { "name", "inferred_type", "null_pct", "type_consistency",
              "numbers_as_text", "ambiguous_dates", "duplicate_name", ... } ]
}

Details

Receiving wallet 0xf07538B80b6959E5B8e4b5dF65C73194D50fB7Eb
Inputs: CSV, TSV, XLSX up to 10 MB. Files are analyzed in isolation and never stored.
Machine-readable manifest: /.well-known/x402

Links