{"openapi":"3.1.0","info":{"title":"TableProof","version":"0.1.0","description":"CSV audit and keyed diff. Paid calls: 0.05 USDC on Base via x402. No storage of CSV contents."},"servers":[{"url":"https://tableproof-data.mitchellwhite.chatgpt.site"}],"paths":{"/v1/audit":{"post":{"operationId":"audit","summary":"Audit CSV for missing required fields, duplicates, column types and spreadsheet formula candidates. Deterministic JSON; string identifiers preserved.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["csv"],"properties":{"csv":{"type":"string","maxLength":500000},"columns":{"type":"object","description":"Column names map to rules: required (boolean), unique (boolean), type (string, integer, number, boolean, iso-date)."}}}}}},"responses":{"200":{"description":"Audit or diff result. Counts are complete; row details limited to 100 per category.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Input validation error; no payment collected."},"402":{"description":"x402 v2 payment requirements in PAYMENT-REQUIRED header."},"413":{"description":"Request too large."},"503":{"description":"Payment verification or service unavailable."}}}},"/v1/diff":{"post":{"operationId":"diff","summary":"Compare before and after CSV by unique composite key; return added, removed and changed rows, ignoring column order.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["before","after","keys"],"properties":{"before":{"type":"string","maxLength":500000},"after":{"type":"string","maxLength":500000},"keys":{"type":"array","minItems":1,"items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Audit or diff result. Counts are complete; row details limited to 100 per category.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Input validation error; no payment collected."},"402":{"description":"x402 v2 payment requirements in PAYMENT-REQUIRED header."},"413":{"description":"Request too large."},"503":{"description":"Payment verification or service unavailable."}}}},"/dots/plan":{"post":{"summary":"Free Dots workflow planning","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tasks"],"properties":{"tasks":{"type":"array","minItems":1,"maxItems":5,"items":{"type":"string","enum":["research","local-files","plugins","messaging","purchase"]}},"local_online":{"type":"boolean"},"plugins_connected":{"type":"boolean"},"purchase_authorized":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Checklist or timestamped HTTP observations, limits and measurement status"},"400":{"description":"Invalid request; descriptive error JSON"},"503":{"description":"Temporarily unavailable"}}}},"/dots/check-sources":{"post":{"summary":"Free public-source HTTP reachability check; not factual claim verification","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["urls"],"properties":{"urls":{"type":"array","minItems":1,"maxItems":3,"items":{"type":"string","format":"uri","maxLength":1200},"description":"Credential-free HTTPS on learn.chatgpt.com, help.openai.com, openai.com, developers.openai.com, github.com or raw.githubusercontent.com, without query parameters."}}}}}},"responses":{"200":{"description":"Checklist or timestamped HTTP observations, limits and measurement status"},"400":{"description":"Invalid request; descriptive error JSON"},"503":{"description":"Temporarily unavailable"}}}},"/dots/check-market-intent":{"post":{"operationId":"checkMarketIntent","summary":"Free marketplace listing intent checklist","description":"Metadata-only heuristic; no buyer-demand, funding or eligibility verification. Maximum JSON body 5000 bytes; aggregate usage counter only.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["intent"],"properties":{"intent":{"type":"string","enum":["find_buyer","publish_service"]},"listing_type":{"type":["string","null"],"enum":["hiring","for_hire",null],"default":null},"title":{"type":"string","maxLength":200},"description":{"type":"string","maxLength":3500},"payment_coin":{"type":["string","null"],"maxLength":30}},"additionalProperties":true}}}},"responses":{"200":{"description":"Warnings, manual-review checklist, unverified payment evidence and aggregate usage status"},"400":{"description":"Invalid input JSON; error_code invalid_input, retryable false"},"503":{"description":"Temporarily unavailable; error_code temporarily_unavailable, retryable true"}}}},"/dots/check-payment-terms":{"post":{"operationId":"checkPaymentTerms","summary":"Free unsigned Base USDC payment-terms checklist","description":"Maximum JSON8000bytes; metadata only, no payment authorization or settlement certification.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["expected_pay_to","max_usdc","challenge"],"properties":{"expected_pay_to":{"type":"string","pattern":"^0x(?!0{40}$)[0-9a-fA-F]{40}$"},"max_usdc":{"type":"string","pattern":"^(?!0+(?:\\.0+)?$)\\d{1,7}(?:\\.\\d{1,6})?$"},"challenge":{"type":"object","required":["accepts"],"properties":{"accepts":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"object"}}},"additionalProperties":true}},"additionalProperties":true}}}},"responses":{"200":{"description":"Per-offer issues and declared-term match; no authorization, settlement, delivery or recipient identity verified"},"400":{"description":"Invalid input; error_code invalid_input, retryable false"},"503":{"description":"Temporarily unavailable; retryable true"}}}},"/dots/feedback":{"post":{"operationId":"recordToolFeedback","summary":"Optional anonymous predefined tool feedback","description":"Aggregate choice counts only. Not a job, order, funding, unique user or paid receipt. Maximum250bytes; no free text.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["choice","signal"],"additionalProperties":false,"properties":{"choice":{"type":"string","enum":["visual-packet","subtitle-qa","async-callback","api-contract","payment-terms","public-sources","market-intent","order-poller","public-launch","parser-review","csv-toolkit","jsonl-toolkit","other-chain-terms","skill-packaging"]},"signal":{"type":"string","enum":["used-helpfully","needs-improvement","want-this"]}}}}}},"responses":{"200":{"description":"Aggregate recorded boolean; no follow-up or order created"},"400":{"description":"Invalid input; retryable false"},"503":{"description":"Unavailable; retryable true"}}}},"/dots/check-subtitles":{"post":{"operationId":"checkPublicSrtCaptions","summary":"Free common-profile SRT cue and timing checklist","description":"Public/redacted text only; 16000-byte JSON body, 12000-character SRT, maximum200 blocks. Aggregate counts only; no input retention. No audio sync/word accuracy/native Dot certification.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["srt"],"additionalProperties":false,"properties":{"srt":{"type":"string","minLength":1,"maxLength":12000,"pattern":"\\S"},"max_cps":{"type":"number","minimum":1,"maximum":60}}}}}},"responses":{"200":{"description":"Profile errors and heuristic warnings; not proof of media accuracy"},"400":{"description":"Unsupported input or bounds; retryable false"},"503":{"description":"Unavailable; retryable true"}}}}}}