{"site":{"name":"Agent Evidence Utility","url":"https://agent-evidence-extractor.defcronyke.workers.dev","description":"Pay-per-call USDC utilities for agents on Base, Arbitrum One, or Polygon: U.S. NWS forecasts and alerts, deterministic JSON and CSV cleanup, validation, and schema monitoring, evidence-linked invoice/receipt parsing from text or small PDF, text extraction, and low-cost text classification and sentiment."},"agents":{"agent-evidence-utility":"https://agent-evidence-extractor.defcronyke.workers.dev/agents.json"},"name":"Agent Evidence Utility","version":"0.8.114","description":"Pay-per-call USDC utilities for agents on Base, Arbitrum One, or Polygon: U.S. NWS forecasts and alerts, deterministic JSON and CSV cleanup, validation, and schema monitoring, evidence-linked invoice/receipt parsing from text or small PDF, text extraction, and low-cost text classification and sentiment.","transport":{"type":"http","documentation":"https://agent-evidence-extractor.defcronyke.workers.dev/openapi.json"},"interaction_model":"HTTP GET and POST with x402 v2 payment on Base (eip155:8453), Arbitrum One (eip155:42161), or Polygon (eip155:137)","skills":[{"id":"json-preflight","name":"JSON record preflight","description":"Validate up to 1,000 JSON objects against nested object/array contracts, required fields, types, enum values, bounds, duplicate keys, and unexpected properties; deterministic, no model call, and no record values returned.","endpoint":"/v1/json-preflight","method":"POST","price":"0.005 USDC","input_schema":{"$defs":{"jsonProperty":{"anyOf":[{"type":"string","enum":["string","integer","number","boolean","array","object","null"]},{"type":"object","required":["type"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["string","integer","number","boolean","array","object","null"]},"properties":{"type":"object","maxProperties":50,"additionalProperties":{"$ref":"#/$defs/jsonProperty"}},"required":{"type":"array","uniqueItems":true,"items":{"type":"string"}},"items":{"$ref":"#/$defs/jsonProperty"},"additionalProperties":{"type":"boolean"},"enum":{"type":"array","maxItems":100,"items":{"type":["string","number","boolean","null"]}},"minimum":{"type":"number"},"maximum":{"type":"number"},"minLength":{"type":"integer","minimum":0},"maxLength":{"type":"integer","minimum":0},"minItems":{"type":"integer","minimum":0},"maxItems":{"type":"integer","minimum":0}}}]}},"type":"object","required":["records","properties"],"additionalProperties":false,"properties":{"records":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object"},"description":"Caller-supplied JSON objects; serialized input is limited to 262,144 characters."},"properties":{"type":"object","minProperties":1,"maxProperties":50,"additionalProperties":{"$ref":"#/$defs/jsonProperty"},"description":"Map field names to simple type strings or nested object/array schemas. Nested schema depth is limited to 8."},"required":{"type":"array","uniqueItems":true,"items":{"type":"string"}},"rules":{"type":"object","maxProperties":50,"additionalProperties":{"type":"object","additionalProperties":false,"properties":{"unique":{"type":"boolean"},"allowed":{"type":"array","maxItems":100,"items":{"type":["string","number","boolean"]}},"min":{"type":"number"},"max":{"type":"number"}}}},"unique_by":{"type":"array","maxItems":20,"items":{"type":"array","minItems":2,"maxItems":10,"uniqueItems":true,"items":{"type":"string"}}},"allow_additional_properties":{"type":"boolean","description":"Defaults to false for top-level undeclared fields; set true to allow them."}}},"output_schema":{"type":"object","required":["ok","summary","issues","note"]}},{"id":"text-insights","name":"Text classification and insights","description":"One low-cost model call classifies supplied text into caller-defined labels and returns coarse sentiment, matching keywords, a short summary, and an exact supporting quote; no independent model cross-check.","endpoint":"/v1/text-insights","method":"POST","price":"0.005 USDC","input_schema":{"type":"object","required":["text","categories"],"properties":{"text":{"type":"string","minLength":1,"maxLength":12000},"categories":{"type":"array","minItems":2,"maxItems":12,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":64}}},"additionalProperties":false},"output_schema":{"type":"object","required":["classification","sentiment","keywords","summary","evidence_quote"],"properties":{"classification":{"type":["string","null"]},"sentiment":{"type":"string","enum":["positive","neutral","negative","mixed"]},"keywords":{"type":"array","items":{"type":"string"}},"summary":{"type":"string"},"evidence_quote":{"type":["string","null"]}}}},{"id":"batch-text-insights","name":"Batch classification for support tickets and reviews","description":"Classify 2 to 5 short texts in one paid request using shared caller-defined categories. One medium-effort gpt-6-luna pass per text; exact quote and keyword checks; no independent cross-check. $0.02 per batch.","endpoint":"/v1/batch-text-insights","method":"POST","price":"0.02 USDC per batch","input_schema":{"type":"object","required":["items","categories"],"properties":{"items":{"type":"array","minItems":2,"maxItems":5,"items":{"type":"object","required":["text"],"properties":{"text":{"type":"string","minLength":1,"maxLength":2000}},"additionalProperties":false}},"categories":{"type":"array","minItems":2,"maxItems":12,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":64}}},"additionalProperties":false},"output_schema":{"type":"object","required":["results","model","reasoning_effort","verification_passes","note"],"properties":{"results":{"type":"array","minItems":2,"maxItems":5,"items":{"type":"object","required":["classification","sentiment","keywords","summary","evidence_quote"]}},"model":{"type":"string"},"reasoning_effort":{"type":"string","const":"medium"},"verification_passes":{"type":"integer","const":1},"note":{"type":"string"}}}},{"id":"weather","name":"U.S. forecast and active alerts","description":"Fetch hourly or 12-hour weather forecasts and optionally active alerts from the U.S. National Weather Service for supported coordinates; no model call.","endpoint":"/v1/weather","method":"POST","price":"0.005 USDC","input_schema":{"type":"object","required":["latitude","longitude"],"properties":{"latitude":{"type":"number","minimum":17,"maximum":72},"longitude":{"type":"number","minimum":-180,"maximum":-60},"forecast_type":{"type":"string","enum":["12_hour","hourly"]},"periods":{"type":"integer","minimum":1,"maximum":24},"include_alerts":{"type":"boolean"}}},"output_schema":{"type":"object","required":["source","location","forecast_type","forecast_periods","active_alerts","note"],"properties":{"source":{"type":"string"},"location":{"anyOf":[{"type":"object","properties":{"city":{"type":"string"},"state":{"type":"string"}},"additionalProperties":false},{"type":"null"}]},"forecast_type":{"type":"string","enum":["12_hour","hourly"]},"forecast_periods":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"start_time":{"type":"string","format":"date-time"},"end_time":{"type":"string","format":"date-time"},"temperature":{"type":["number","null"]},"temperature_unit":{"type":"string"},"precipitation_probability_percent":{"type":["number","null"]},"relative_humidity_percent":{"type":["number","null"]},"wind_speed":{"type":"string"},"wind_direction":{"type":"string"},"short_forecast":{"type":"string"},"detailed_forecast":{"type":"string"}},"additionalProperties":false}},"active_alerts":{"type":"array","items":{"type":"object","properties":{"event":{"type":["string","null"]},"headline":{"type":["string","null"]},"severity":{"type":["string","null"]},"urgency":{"type":["string","null"]},"effective":{"type":["string","null"]},"expires":{"type":["string","null"]},"area_description":{"type":["string","null"]},"instruction":{"type":["string","null"]}},"additionalProperties":false}},"note":{"type":"string"}},"additionalProperties":false}},{"id":"weather-batch","name":"Multi-location U.S. forecast batch","description":"Fetch one independent U.S. NWS hourly or 12-hour forecast and optional alerts for each of 2–5 coordinates in one $0.01 paid call; no model calls. Intended for comparing trip stops or multiple sites.","endpoint":"/v1/weather-batch","method":"POST","price":"0.01 USDC per batch","input_schema":{"type":"object","required":["locations"],"additionalProperties":false,"properties":{"locations":{"type":"array","minItems":2,"maxItems":5,"items":{"type":"object","required":["latitude","longitude"],"properties":{"latitude":{"type":"number","minimum":17,"maximum":72},"longitude":{"type":"number","minimum":-180,"maximum":-60}},"additionalProperties":false}},"forecast_type":{"type":"string","enum":["12_hour","hourly"],"default":"12_hour"},"periods":{"type":"integer","minimum":1,"maximum":24,"description":"For 12_hour, 1–8 (default 4); for hourly, 1–24 (default 12)."},"include_alerts":{"type":"boolean","default":true}}},"output_schema":{"type":"object","required":["results","note"],"additionalProperties":false,"properties":{"results":{"type":"array","minItems":2,"maxItems":5,"items":{"type":"object","required":["index","coordinates","source","location","forecast_type","forecast_periods","active_alerts","note"],"properties":{"index":{"type":"integer"},"coordinates":{"type":"object","required":["latitude","longitude"],"properties":{"latitude":{"type":"number"},"longitude":{"type":"number"}},"additionalProperties":false},"source":{"type":"string"},"location":{"anyOf":[{"type":"object","properties":{"city":{"type":"string"},"state":{"type":"string"}},"additionalProperties":false},{"type":"null"}]},"forecast_type":{"type":"string","enum":["12_hour","hourly"]},"forecast_periods":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"start_time":{"type":"string","format":"date-time"},"end_time":{"type":"string","format":"date-time"},"temperature":{"type":["number","null"]},"temperature_unit":{"type":"string"},"precipitation_probability_percent":{"type":["number","null"]},"relative_humidity_percent":{"type":["number","null"]},"wind_speed":{"type":"string"},"wind_direction":{"type":"string"},"short_forecast":{"type":"string"},"detailed_forecast":{"type":"string"}},"additionalProperties":false}},"active_alerts":{"type":"array","items":{"type":"object","properties":{"event":{"type":["string","null"]},"headline":{"type":["string","null"]},"severity":{"type":["string","null"]},"urgency":{"type":["string","null"]},"effective":{"type":["string","null"]},"expires":{"type":["string","null"]},"area_description":{"type":["string","null"]},"instruction":{"type":["string","null"]}},"additionalProperties":false}},"note":{"type":"string"}},"additionalProperties":false}},"note":{"type":"string"}}}},{"id":"csv-diff","name":"One-time CSV snapshot comparison","description":"One-time, stateless comparison of two supplied CSV files for schema and aggregate quality changes; no state or cell values are retained and no AI model is used.","endpoint":"/v1/csv-diff","method":"POST","price":"0.005 USDC","input_schema":{"type":"object","required":["before_csv","after_csv"],"properties":{"before_csv":{"type":"string","maxLength":262144},"after_csv":{"type":"string","maxLength":262144},"numeric_bounds":{"type":"object","maxProperties":50,"description":"Optional min/max thresholds; returns counts only."},"allowed_columns":{"type":"array","maxItems":100,"uniqueItems":true,"items":{"type":"string","maxLength":128}},"required_columns":{"type":"array","maxItems":100,"uniqueItems":true,"items":{"type":"string","maxLength":128}}}},"output_schema":{"type":"object","required":["schema_changed","contract_violations","changes","row_count","structural_issues","note"],"properties":{"schema_changed":{"type":"boolean"},"contract_violations":{"type":"object","required":["unexpected_columns","missing_required_columns"],"properties":{"unexpected_columns":{"type":"array","items":{"type":"string"}},"missing_required_columns":{"type":"array","items":{"type":"string"}}}},"changes":{"type":"object","required":["added_columns","removed_columns","inferred_type_changes","reordered_columns","missing_rate_changes","numeric_excursions"]},"row_count":{"type":"object"},"structural_issues":{"type":"object"},"note":{"type":"string"}}}},{"id":"csv-monitor","name":"Recurring CSV schema drift monitor","description":"Detect schema drift and enforce optional saved import-validation rules as your scheduler sends successive CSV feed snapshots using a reusable private token. Aggregate profiles and rules expire after 30 days; raw rows are never retained. The caller sends each snapshot; this service does not poll URLs or send webhooks.","endpoint":"/v1/csv-monitor","method":"POST","price":"0.005 USDC","input_schema":{"type":"object","required":["monitor_token"],"properties":{"monitor_token":{"type":"string","minLength":32,"maxLength":256},"csv":{"type":"string","maxLength":262144,"description":"Required unless forget is true."},"forget":{"type":"boolean"},"validation":{"type":"object","required":["columns"],"properties":{"columns":{"type":"object","minProperties":1,"maxProperties":50,"additionalProperties":{"type":"string","enum":["string","integer","number","boolean","date","email"]}},"required":{"type":"array","uniqueItems":true,"items":{"type":"string"}},"unique_by":{"type":"array","maxItems":20,"items":{"type":"array","minItems":2,"maxItems":10,"uniqueItems":true,"items":{"type":"string"}}},"rules":{"type":"object","maxProperties":50},"flag_formula_cells":{"type":"boolean"},"detect_duplicate_rows":{"type":"boolean"}}}}}},{"id":"csv-profile","name":"CSV schema profile","description":"Infer conservative column types, report empty/distinct counts and possible unique keys, and return a draft JSON Schema 2020-12 without returning cell values or using an AI model. Review sample-based inference before production use.","endpoint":"/v1/csv-profile","method":"POST","price":"0.005 USDC"},{"id":"csv-to-json","name":"CSV to JSON conversion","description":"Convert comma-, semicolon-, tab-, or pipe-delimited files into JSON objects with quote-aware delimiter detection. Preserves cell contents as strings, skips and counts blank rows, and rejects malformed or ragged data; deterministic, no model call or source retention.","endpoint":"/v1/csv-to-json","method":"POST","price":"0.005 USDC","input_schema":{"type":"object","required":["csv"],"properties":{"csv":{"type":"string","minLength":1,"maxLength":262144}},"additionalProperties":false},"output_schema":{"type":"object","required":["columns","row_count","skipped_blank_rows","delimiter","rows","note"]}},{"id":"json-to-csv","name":"JSON records to CSV conversion","description":"Convert one to one thousand flat JSON records into comma-delimited CSV with quote escaping and optional column order. Null and missing fields become empty cells; formula-like values are preserved, not sanitized. Deterministic, no model call or source retention.","endpoint":"/v1/json-to-csv","method":"POST","price":"0.005 USDC","input_schema":{"type":"object","required":["records"],"properties":{"records":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","maxProperties":100,"additionalProperties":{"type":["string","number","boolean","null"]}}},"columns":{"type":"array","minItems":1,"maxItems":100,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128}}},"additionalProperties":false},"output_schema":{"type":"object","required":["columns","row_count","csv","note"]}},{"id":"jsonl-convert","name":"JSON Lines converter","description":"Convert up to 1,000 JSON values to compact JSON Lines or parse JSON Lines to a JSON array. Supports nested values to depth 64; a final newline is allowed; blank or malformed lines are rejected. Deterministic, no model call or source retention.","endpoint":"/v1/jsonl-convert","method":"POST","price":"0.005 USDC","input_schema":{"type":"object","required":["direction"],"additionalProperties":false,"description":"Set direction to json_to_jsonl and provide records, or set it to jsonl_to_json and provide jsonl. Provide only the matching input field.","properties":{"direction":{"type":"string","enum":["json_to_jsonl","jsonl_to_json"]},"records":{"type":"array","minItems":1,"maxItems":1000,"description":"Required for json_to_jsonl. JSON values are serialized one per line; nested values are supported to depth 64."},"jsonl":{"type":"string","minLength":1,"maxLength":262144,"description":"Required for jsonl_to_json. One JSON value per line; at most 1,000 lines. A final newline is allowed."}}},"output_schema":{"type":"object","required":["direction","record_count","note"]}},{"id":"csv-import-json","name":"Clean, validate, and convert CSV to typed JSON","description":"Optionally clean selected columns with explicit ordered transformations before validating an ETL schema and converting passing CSV rows to JSON. Set coerce_types=true for native numbers and booleans. Failed imports return issue codes without cell values. Deterministic, no model call; $0.005 USDC.","endpoint":"/v1/csv-import-json","method":"POST","price":"0.005 USDC","input_schema":{"type":"object","required":["csv","columns"],"additionalProperties":false,"properties":{"csv":{"type":"string","minLength":1,"maxLength":262144,"description":"CSV document with a header row; up to 1,000 records."},"columns":{"type":"object","minProperties":1,"maxProperties":50,"additionalProperties":{"type":"string","enum":["string","integer","number","boolean","date","email"]},"description":"Map expected CSV header names to types."},"required":{"type":"array","uniqueItems":true,"items":{"type":"string"},"description":"Columns that may not be empty; each name must also appear in columns."},"rules":{"type":"object","maxProperties":50,"description":"Optional per-column rules, limited to 16,384 serialized characters.","additionalProperties":{"type":"object","additionalProperties":false,"properties":{"unique":{"type":"boolean"},"allowed":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":256}},"min":{"type":"number"},"max":{"type":"number"}}}},"flag_formula_cells":{"type":"boolean","description":"Optionally flag cells beginning with spreadsheet formula markers; reports only row/column and does not return or change values."},"detect_duplicate_rows":{"type":"boolean","description":"Optionally flag exact repeated full rows after trimming outer whitespace; reports row numbers only."},"unique_by":{"type":"array","maxItems":20,"description":"Optional composite keys. Each key lists 2 to 10 declared columns; duplicate complete tuples are reported without returning their values.","items":{"type":"array","minItems":2,"maxItems":10,"uniqueItems":true,"items":{"type":"string"}}},"coerce_types":{"type":"boolean","description":"When true, convert declared integer, number, and boolean columns to native JSON numbers and booleans. Blank cells and string/date/email values remain strings."},"transformations":{"type":"object","minProperties":1,"maxProperties":50,"description":"Optional ordered cleanup rules applied to selected data columns before validation and JSON conversion.","additionalProperties":{"type":"array","minItems":1,"maxItems":5,"uniqueItems":true,"items":{"type":"string","enum":["trim","collapse_whitespace","lowercase","uppercase","remove_control_characters"]}}}}},"output_schema":{"type":"object","required":["ok","validation","delimiter","rows","value_types_coerced","note"]}},{"id":"batch-csv-preflight","name":"Batch CSV import preflight","description":"Validate two to five CSV files independently against one shared schema, optionally checking exact duplicate rows; deterministic and no model calls, with no cell values returned.","endpoint":"/v1/batch-csv-preflight","method":"POST","price":"0.01 USDC per batch","input_schema":{"type":"object","required":["items","columns"],"properties":{"items":{"type":"array","minItems":2,"maxItems":5,"items":{"type":"string","minLength":1}},"columns":{"type":"object"},"required":{"type":"array","items":{"type":"string"}},"rules":{"type":"object"},"unique_by":{"type":"array"},"flag_formula_cells":{"type":"boolean"},"detect_duplicate_rows":{"type":"boolean"}}},"output_schema":{"type":"object","required":["results","summary","note"]}},{"id":"csv-import-ready","name":"Clean, validate, and convert CSV to typed ETL JSON","description":"Optionally clean selected CSV columns using explicit ordered string transformations before profiling, caller-schema validation, and JSON conversion in one request. Operations include trim, whitespace collapse, case normalization, and control-character removal. Transformations run before validation; rejected data returns only issue codes. Deterministic, no model call; $0.005 USDC.","endpoint":"/v1/csv-import-ready","method":"POST","price":"0.005 USDC","input_schema":{"type":"object","required":["csv","columns"],"additionalProperties":false,"properties":{"csv":{"type":"string","minLength":1,"maxLength":262144,"description":"CSV document with a header row; up to 1,000 records."},"columns":{"type":"object","minProperties":1,"maxProperties":50,"additionalProperties":{"type":"string","enum":["string","integer","number","boolean","date","email"]},"description":"Map expected CSV header names to types."},"required":{"type":"array","uniqueItems":true,"items":{"type":"string"},"description":"Columns that may not be empty; each name must also appear in columns."},"rules":{"type":"object","maxProperties":50,"description":"Optional per-column rules, limited to 16,384 serialized characters.","additionalProperties":{"type":"object","additionalProperties":false,"properties":{"unique":{"type":"boolean"},"allowed":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":256}},"min":{"type":"number"},"max":{"type":"number"}}}},"flag_formula_cells":{"type":"boolean","description":"Optionally flag cells beginning with spreadsheet formula markers; reports only row/column and does not return or change values."},"detect_duplicate_rows":{"type":"boolean","description":"Optionally flag exact repeated full rows after trimming outer whitespace; reports row numbers only."},"unique_by":{"type":"array","maxItems":20,"description":"Optional composite keys. Each key lists 2 to 10 declared columns; duplicate complete tuples are reported without returning their values.","items":{"type":"array","minItems":2,"maxItems":10,"uniqueItems":true,"items":{"type":"string"}}},"coerce_types":{"type":"boolean","description":"When true, convert declared integer, number, and boolean columns to native JSON numbers and booleans. Blank cells and string/date/email values remain strings."},"transformations":{"type":"object","minProperties":1,"maxProperties":50,"description":"Optional ordered cleanup rules applied to selected data columns before validation and JSON conversion.","additionalProperties":{"type":"array","minItems":1,"maxItems":5,"uniqueItems":true,"items":{"type":"string","enum":["trim","collapse_whitespace","lowercase","uppercase","remove_control_characters"]}}}}},"output_schema":{"type":"object","required":["ok","validation","delimiter","rows","value_types_coerced","profile","note"]}},{"id":"csv-clean","name":"Clean messy CSV rows with explicit transformations","description":"Clean CSV data by applying caller-selected trim, whitespace-collapse, lowercase, uppercase, or control-character-removal operations to named columns. Returns transformed CSV and changed-cell counts; untouched columns, headers, and blank rows remain unchanged. Deterministic, no model call; $0.005 USDC.","endpoint":"/v1/csv-clean","method":"POST","price":"0.005 USDC","input_schema":{"type":"object","required":["csv","transformations"],"additionalProperties":false,"properties":{"csv":{"type":"string","minLength":1,"maxLength":262144,"description":"CSV document with a header row; up to 1,000 records."},"transformations":{"type":"object","minProperties":1,"maxProperties":50,"description":"Map exact, case-sensitive CSV column names to an ordered list of explicit transformations.","additionalProperties":{"type":"array","minItems":1,"maxItems":5,"uniqueItems":true,"items":{"type":"string","enum":["trim","collapse_whitespace","lowercase","uppercase","remove_control_characters"]}}}}},"output_schema":{"type":"object","required":["csv","columns","records_processed","blank_rows_preserved","delimiter","changed_cells","changed_cells_by_column","note"]}},{"id":"csv-import-audit","name":"CSV import audit","description":"Combine aggregate CSV profiling with validation against a caller-supplied schema in one deterministic, no-model request; optionally flag exact duplicate rows without returning cell values.","endpoint":"/v1/csv-import-audit","method":"POST","price":"0.005 USDC","input_schema":{"type":"object","required":["csv","columns"],"properties":{"csv":{"type":"string","maxLength":262144},"columns":{"type":"object"},"required":{"type":"array","items":{"type":"string"}},"rules":{"type":"object"},"unique_by":{"type":"array"},"flag_formula_cells":{"type":"boolean"},"detect_duplicate_rows":{"type":"boolean"}}},"output_schema":{"type":"object","required":["profile","preflight","summary","note"]}},{"id":"csv-duplicate-key-check","name":"Find duplicate CSV keys using text and key_columns","description":"Check single or composite CSV keys before ETL; returns row numbers and issue codes without cell values. Deterministic, no model call.","endpoint":"/v1/csv-duplicate-key-check","method":"POST","price":"0.005 USDC","input_schema":{"type":"object","required":["text","key_columns"],"additionalProperties":false,"properties":{"text":{"type":"string","minLength":1,"maxLength":262144,"description":"CSV document with a header row; up to 1,000 records."},"key_columns":{"type":"array","minItems":1,"maxItems":10,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128},"description":"One or more CSV header names comprising the key tuple."}}},"output_schema":{"type":"object","required":["ok","summary","issues"]}},{"id":"csv-preflight","name":"Validate CSV rows before database import","description":"Validate CSV rows against a caller-defined import contract: required headers and values, declared types, allowed values and numeric bounds, with optional unique/composite-key, duplicate-row, and formula-like-cell checks. Returns row-numbered issue codes, never cell values. Deterministic; no model call.","endpoint":"/v1/csv-preflight","method":"POST","price":"0.005 USDC","input_schema":{"type":"object","required":["csv","columns"],"properties":{"csv":{"type":"string","maxLength":262144},"columns":{"type":"object","description":"Map expected column names to supported types."},"required":{"type":"array","items":{"type":"string"}},"rules":{"type":"object"},"unique_by":{"type":"array","description":"Composite keys expressed as arrays of declared columns."},"flag_formula_cells":{"type":"boolean","description":"Optional row/column-only warnings for formula-like values."},"detect_duplicate_rows":{"type":"boolean","description":"Optional exact duplicate-row check; reports row numbers only."}}},"output_schema":{"type":"object","required":["ok","summary","issues"],"properties":{"ok":{"type":"boolean"},"summary":{"type":"object"},"issues":{"type":"array"}}}},{"id":"extract-lite","name":"Low-cost evidence-linked extraction","description":"One medium-effort gpt-6-luna pass to extract typed fields with exact source quote checks; no independent model cross-check.","endpoint":"/v1/extract-lite","method":"POST","price":"0.005 USDC"},{"id":"extract-balanced","name":"Balanced evidence-linked extraction","description":"Two independent medium-effort gpt-6-luna extractions plus one source-based reconciliation pass; exact source quote checks; no accuracy guarantee.","endpoint":"/v1/extract-balanced","method":"POST","price":"0.01 USDC","input_schema":{"type":"object","required":["text","fields"],"properties":{"text":{"type":"string","minLength":1,"maxLength":12000},"fields":{"type":"object","minProperties":1,"maxProperties":10,"additionalProperties":{"type":"string","enum":["string","number","integer","boolean"]}}},"additionalProperties":false}},{"id":"invoice-extract","name":"Evidence-linked invoice header extraction","description":"Extract common invoice header fields from caller-supplied OCR/text using three gpt-6-luna medium-effort passes; exact source quotes; printed date and amount strings are preserved; no line items or calculations.","endpoint":"/v1/invoice-extract","method":"POST","price":"0.01 USDC","input_schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","minLength":1,"maxLength":12000}},"additionalProperties":false}},{"id":"invoice-parse","name":"Invoice and receipt parser with quoted line items","description":"Parse caller-supplied OCR/text from invoices or receipts into supplier, invoice number, dates, currency, totals, purchase order, terms, and up to 30 printed line items with exact evidence quotes. Preserves amounts and quantities as printed; no arithmetic.","endpoint":"/v1/invoice-parse","method":"POST","price":"0.02 USDC","input_schema":{"type":"object","required":["text"],"additionalProperties":false,"properties":{"text":{"type":"string","minLength":1,"maxLength":12000,"description":"Caller-supplied invoice/receipt text or OCR output. No file or URL is fetched."}}}},{"id":"invoice-pdf-parse","name":"Invoice/receipt PDF OCR to structured JSON","description":"Extract vendor, invoice number and dates, subtotal, tax, total, purchase order, terms, and up to ten line items from a text or scanned invoice/receipt PDF. Two gpt-6-luna medium-effort calls; exact quotes are checked against generated OCR text. Base64 PDF up to two pages and 256 KiB; review against the original. $0.01 USDC.","endpoint":"/v1/invoice-pdf-parse","method":"POST","price":"0.01 USDC","input_schema":{"type":"object","required":["pdf_base64"],"additionalProperties":false,"properties":{"pdf_base64":{"type":"string","contentEncoding":"base64","contentMediaType":"application/pdf","minLength":1,"maxLength":349528,"description":"Standard padded Base64 of an unencrypted PDF, at most 256 KiB and two pages. No URL is fetched."}}},"output_schema":{"type":"object","properties":{"data":{"type":"object","properties":{"supplier_name":{"type":["string","null"],"description":"Supplier or vendor name exactly as printed."},"invoice_number":{"type":["string","null"],"description":"Invoice identifier; preserve formatting."},"invoice_date":{"type":["string","null"],"description":"Printed issue date; preserve its original format."},"due_date":{"type":["string","null"],"description":"Printed payment due date; preserve its original format."},"currency":{"type":["string","null"],"description":"Currency explicitly shown; null if not explicit."},"subtotal":{"type":["string","null"],"description":"Printed subtotal, preserving currency and formatting."},"tax_amount":{"type":["string","null"],"description":"Printed tax amount, preserving currency and formatting."},"total_amount":{"type":["string","null"],"description":"Printed final amount due, preserving formatting."},"purchase_order_number":{"type":["string","null"],"description":"Printed purchase-order reference."},"payment_terms":{"type":["string","null"],"description":"Printed payment terms; do not infer."},"line_items":{"type":["array","null"],"maxItems":10,"items":{"type":"object","properties":{"description":{"type":["string","null"],"description":"Printed product or service description."},"sku":{"type":["string","null"],"description":"Printed item, product, or SKU code."},"quantity":{"type":["string","null"],"description":"Printed quantity, preserving formatting and units."},"unit_price":{"type":["string","null"],"description":"Printed per-unit price, preserving currency and formatting."},"amount":{"type":["string","null"],"description":"Printed line amount, preserving currency and formatting."}},"required":["description","sku","quantity","unit_price","amount"],"additionalProperties":false}}},"required":["supplier_name","invoice_number","invoice_date","due_date","currency","subtotal","tax_amount","total_amount","purchase_order_number","payment_terms","line_items"],"additionalProperties":false},"evidence":{"type":"object","properties":{"supplier_name":{"type":["string","null"]},"invoice_number":{"type":["string","null"]},"invoice_date":{"type":["string","null"]},"due_date":{"type":["string","null"]},"currency":{"type":["string","null"]},"subtotal":{"type":["string","null"]},"tax_amount":{"type":["string","null"]},"total_amount":{"type":["string","null"]},"purchase_order_number":{"type":["string","null"]},"payment_terms":{"type":["string","null"]},"line_items":{"type":["array","null"],"maxItems":10,"items":{"type":"object","properties":{"description":{"type":["string","null"]},"sku":{"type":["string","null"]},"quantity":{"type":["string","null"]},"unit_price":{"type":["string","null"]},"amount":{"type":["string","null"]}},"required":["description","sku","quantity","unit_price","amount"],"additionalProperties":false}}},"required":["supplier_name","invoice_number","invoice_date","due_date","currency","subtotal","tax_amount","total_amount","purchase_order_number","payment_terms","line_items"],"additionalProperties":false},"model":{"type":"string","const":"gpt-6-luna"},"reasoning_effort":{"type":"string","const":"medium"},"note":{"type":"string","description":"Model output may be wrong; verify before consequential use."},"verification_passes":{"type":"integer","const":2},"source_pdf_pages":{"type":"integer","minimum":1,"maximum":2}},"required":["data","evidence","model","reasoning_effort","verification_passes","source_pdf_pages","note"],"additionalProperties":false}},{"id":"invoice-parse-lite","name":"Extract invoice fields and line items from text","description":"Parse caller-supplied invoice or receipt text or OCR into header fields and up to 10 printed line items. Each returned value has an exact source quote. One gpt-6-luna medium-effort pass; no independent cross-check or calculations.","endpoint":"/v1/invoice-parse-lite","method":"POST","price":"0.005 USDC","input_schema":{"type":"object","required":["text"],"additionalProperties":false,"properties":{"text":{"type":"string","minLength":1,"maxLength":12000,"description":"Caller-supplied invoice/receipt text or OCR output. No file or URL is fetched."}}}},{"id":"ubl-invoice-extract","name":"Extract structured fields from UBL or CII e-invoice XML","description":"Deterministic extraction of selected fields, up to 100 line items, tax breakdowns, and limited arithmetic checks from UBL Invoice 2.x or UN/CEFACT CII CrossIndustryInvoice XML, including Factur-X/ZUGFeRD XML. Not an EN 16931 compliance validator. No model call, no URL fetch, no source retention.","endpoint":"/v1/ubl-invoice-extract","method":"POST","price":"0.005 USDC","input_schema":{"type":"object","required":["xml"],"additionalProperties":false,"properties":{"xml":{"type":"string","minLength":1,"maxLength":262144,"description":"Caller-supplied UBL Invoice 2.x or UN/CEFACT CII CrossIndustryInvoice XML (including Factur-X/ZUGFeRD XML). See /examples/ubl-invoice-extract for CII input and output. DOCTYPE and entity declarations are rejected. PDF files and URLs are not supported."}}},"output_schema":{"type":"object","required":["format","ubl_version","invoice_number","issue_date","due_date","currency","supplier","customer","line_items","line_items_truncated","tax_breakdown","totals","arithmetic_checks","evidence_paths","note"],"properties":{"format":{"type":"string"},"ubl_version":{"type":["string","null"]},"invoice_number":{"type":["string","null"]},"issue_date":{"type":["string","null"]},"due_date":{"type":["string","null"]},"currency":{"type":["string","null"]},"supplier":{"type":"object","required":["name","vat_id","vat_scheme"],"properties":{"name":{"type":["string","null"]},"vat_id":{"type":["string","null"]},"vat_scheme":{"type":["string","null"]}},"additionalProperties":false},"customer":{"type":"object","required":["name","vat_id","vat_scheme"],"properties":{"name":{"type":["string","null"]},"vat_id":{"type":["string","null"]},"vat_scheme":{"type":["string","null"]}},"additionalProperties":false},"line_items":{"type":"array","items":{"type":"object","required":["id","description","quantity","unit_code","unit_price","line_extension_amount","currency","vat_percent"],"properties":{"id":{"type":["string","null"]},"description":{"type":["string","null"]},"quantity":{"type":["string","null"]},"unit_code":{"type":["string","null"]},"unit_price":{"type":["string","null"]},"line_extension_amount":{"type":["string","null"]},"currency":{"type":["string","null"]},"vat_percent":{"type":["string","null"]}},"additionalProperties":false}},"line_items_truncated":{"type":"boolean"},"tax_breakdown":{"type":"array","items":{"type":"object","additionalProperties":true}},"totals":{"type":"object","additionalProperties":true},"arithmetic_checks":{"type":"array","items":{"type":"object","required":["name","status","difference"],"properties":{"name":{"type":"string"},"status":{"type":"string","enum":["not_checked","matches_within_0.02","differs"]},"difference":{"type":["string","null"]}},"additionalProperties":false}},"evidence_paths":{"type":"object","additionalProperties":{"type":"string"}},"note":{"type":"string"}},"additionalProperties":false}},{"id":"extract-fields","name":"Evidence-linked typed extraction","description":"Seven-pass structured extraction from supplied text using a simple field-to-type map, returning exact source quotes.","endpoint":"/v1/extract-fields","method":"POST","price":"0.02 USDC"},{"id":"extract","name":"Evidence-linked schema extraction","description":"Seven-pass structured extraction from supplied text using a JSON Schema, returning exact source quotes.","endpoint":"/v1/extract","method":"POST","price":"0.02 USDC","input_schema":{"type":"object","required":["text","schema"],"properties":{"text":{"type":"string","minLength":1,"maxLength":12000},"schema":{"type":"object","required":["type","properties"],"description":"A JSON Schema object with 1–10 simple fields. All requested fields are returned; use nullable types when a value may be absent. Optional enum and description are supported on each field.","properties":{"type":{"type":"string","const":"object"},"properties":{"type":"object","minProperties":1,"maxProperties":10,"additionalProperties":{"type":"object","required":["type"],"additionalProperties":false,"properties":{"type":{"anyOf":[{"type":"string","enum":["string","number","integer","boolean","null"]},{"type":"array","minItems":1,"maxItems":5,"uniqueItems":true,"items":{"type":"string","enum":["string","number","integer","boolean","null"]}}]},"description":{"type":"string"},"enum":{"type":"array","items":{"type":["string","number","boolean"]}}}}}},"additionalProperties":false}},"additionalProperties":false}},{"id":"batch-extract","name":"Batch evidence extraction","description":"Extract the same schema from two to five supplied texts in one seven-pass pipeline.","endpoint":"/v1/batch-extract","method":"POST","price":"0.05 USDC per batch","input_schema":{"type":"object","required":["items","schema"],"properties":{"items":{"type":"array","minItems":2,"maxItems":5,"items":{"type":"object","required":["text"],"properties":{"text":{"type":"string","minLength":1,"maxLength":12000}},"additionalProperties":false}},"schema":{"type":"object","required":["type","properties"],"description":"A JSON Schema object with 1–10 simple fields. All requested fields are returned; use nullable types when a value may be absent. Optional enum and description are supported on each field.","properties":{"type":{"type":"string","const":"object"},"properties":{"type":"object","minProperties":1,"maxProperties":10,"additionalProperties":{"type":"object","required":["type"],"additionalProperties":false,"properties":{"type":{"anyOf":[{"type":"string","enum":["string","number","integer","boolean","null"]},{"type":"array","minItems":1,"maxItems":5,"uniqueItems":true,"items":{"type":"string","enum":["string","number","integer","boolean","null"]}}]},"description":{"type":"string"},"enum":{"type":"array","items":{"type":["string","number","boolean"]}}}}}},"additionalProperties":false}},"additionalProperties":false}},{"id":"batch-extract-lite","name":"Low-cost multi-text extraction","description":"Extract typed fields from two to five texts using one medium-effort gpt-6-luna pass per text, exact source quote checks, and no independent cross-check.","endpoint":"/v1/batch-extract-lite","method":"POST","price":"0.02 USDC per batch","input_schema":{"type":"object","required":["items","fields"],"properties":{"items":{"type":"array","minItems":2,"maxItems":5,"items":{"type":"object","required":["text"],"properties":{"text":{"type":"string","minLength":1,"maxLength":12000}},"additionalProperties":false}},"fields":{"type":"object","minProperties":1,"maxProperties":10,"additionalProperties":{"type":"string","enum":["string","number","integer","boolean"]}}},"additionalProperties":false}},{"id":"pdf-text","name":"Extract text from a PDF URL","description":"PDF text extraction page by page from public HTTPS URLs via GET ?url=... or POST JSON. Up to 10 MiB and 20 pages; no OCR/model calls. Scans without a text layer are refused. Query strings are redacted in Worker logs; URL and PDF are not retained.","endpoint":"/v1/pdf-text","method":"GET","price":"0.005 USDC","input_schema":{"type":"object","required":["url"],"additionalProperties":false,"properties":{"url":{"type":"string","maxLength":2048,"description":"Public HTTPS URL returning a PDF; no credentials or private-network URLs."}}},"output_schema":{"type":"object","required":["page_count","text","truncated","note"]}},{"id":"pdf-extract-url","name":"Extract text from a PDF URL","description":"GET /pdf/extract?url=... returns page-labeled searchable text from a public HTTPS PDF for $0.005 USDC. Up to 10 MiB and 20 pages; no OCR/model calls.","endpoint":"/pdf/extract","method":"GET","price":"0.005 USDC","input_schema":{"type":"object","required":["url"],"additionalProperties":false,"properties":{"url":{"type":"string","maxLength":2048,"description":"Public HTTPS URL returning a PDF; no credentials or private-network URLs."}}},"output_schema":{"type":"object","required":["page_count","text","truncated","note"]}},{"id":"compare","name":"Evidence-linked text comparison","description":"Extract the same fields from before and after text and return changed field names with source evidence.","endpoint":"/v1/compare","method":"POST","price":"0.02 USDC","input_schema":{"type":"object","required":["before","after","schema"],"properties":{"before":{"type":"string","minLength":1,"maxLength":12000},"after":{"type":"string","minLength":1,"maxLength":12000},"schema":{"type":"object","required":["type","properties"],"description":"A JSON Schema object with 1–10 simple fields. All requested fields are returned; use nullable types when a value may be absent. Optional enum and description are supported on each field.","properties":{"type":{"type":"string","const":"object"},"properties":{"type":"object","minProperties":1,"maxProperties":10,"additionalProperties":{"type":"object","required":["type"],"additionalProperties":false,"properties":{"type":{"anyOf":[{"type":"string","enum":["string","number","integer","boolean","null"]},{"type":"array","minItems":1,"maxItems":5,"uniqueItems":true,"items":{"type":"string","enum":["string","number","integer","boolean","null"]}}]},"description":{"type":"string"},"enum":{"type":"array","items":{"type":["string","number","boolean"]}}}}}},"additionalProperties":false}},"additionalProperties":false}}],"discovery":{"openapi":"/openapi.json","llms":"/llms.txt","x402":"/.well-known/x402","examples":["/examples/json-preflight","/examples/text-insights","/examples/batch-text-insights","/examples/csv-monitor","/examples/csv-profile","/examples/csv-to-json","/examples/json-to-csv","/examples/jsonl-convert","/examples/csv-import-json","/examples/csv-import-ready","/examples/csv-preflight","/examples/csv-clean","/examples/csv-import-audit","/examples/batch-csv-preflight","/examples/csv-diff","/examples/weather-batch","/examples/extract-lite","/examples/extract-balanced","/examples/invoice-extract","/examples/invoice-parse","/examples/invoice-pdf-parse","/examples/pdf-text","/examples/invoice-parse-lite","/examples/ubl-invoice-extract","/examples/batch-extract-lite"]},"limitations":["Only /v1/pdf-text fetches a caller-supplied URL; it accepts validated public HTTPS PDF sources, bounds redirects and download size, and retains neither URL nor document.","Payment is required before paid endpoint execution.","Model output can be wrong; verify before consequential use."]}