{"openapi":"3.1.0","info":{"title":"Jemeen Agent Services","version":"1.0.0","description":"Deterministic verification and data services for AI agents, paid per call via x402.","contact":{"url":"https://jemeen.com","email":"hello@jemeen.com"}},"servers":[{"url":"https://jemeen-agent-services.onrender.com"}],"paths":{"/v1/csv-quality":{"post":{"operationId":"csvQuality","summary":"CSV data quality report","description":"Deterministic quality report for a CSV file: structure errors, ragged rows, inferred column types and conformance, blanks, whitespace, mixed date formats, invalid emails/URLs/phones, duplicate rows and candidate keys, with row-level examples and recommended fixes. No model calls, no data retained.\n\nLimits: Up to 5 MB of CSV text (paid) or 200 KB (free tier).\nPrice: US$0.05 per successful call, paid in USDC via x402 (base, solana). Unpaid requests receive HTTP 402 with payment requirements; failed calls are not charged.","tags":["data-quality","csv","validation","etl"],"x-x402":{"price":"$0.05","currency":"USDC","networks":["base","solana"]},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.05","currency":"USD"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["csv"],"properties":{"csv":{"type":"string","description":"CSV text (UTF-8). Delimiter is auto-detected."},"delimiter":{"type":"string","description":"Optional explicit delimiter: , ; | or \\t"},"hasHeader":{"type":"boolean","description":"Defaults to true."}}},"example":{"csv":"id,email,signup\n1,a@example.com,2026-01-03\n2,not-an-email,03/01/2026\n2,not-an-email,03/01/2026\n"}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input (not charged)"},"402":{"description":"Payment required (x402)"},"413":{"description":"Input too large"}}}},"/free/csv-quality":{"post":{"security":[],"operationId":"csvQualityFree","summary":"CSV data quality report (free tier)","description":"Free tier with smaller limits and a daily per-IP quota. Up to 5 MB of CSV text (paid) or 200 KB (free tier).","tags":["data-quality","csv","validation","etl"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["csv"],"properties":{"csv":{"type":"string","description":"CSV text (UTF-8). Delimiter is auto-detected."},"delimiter":{"type":"string","description":"Optional explicit delimiter: , ; | or \\t"},"hasHeader":{"type":"boolean","description":"Defaults to true."}}},"example":{"csv":"id,email,signup\n1,a@example.com,2026-01-03\n2,not-an-email,03/01/2026\n2,not-an-email,03/01/2026\n"}}}},"responses":{"200":{"description":"Result"},"429":{"description":"Daily free quota used; use the paid endpoint"}}}},"/v1/verify-citations":{"post":{"operationId":"verifyCitations","summary":"Citation and quote verification","description":"Fetches each cited URL and checks whether the quoted text actually appears there. Returns supported / partial / not_found / unreachable per claim, with the matching source passage, character offset, HTTP status, content hash and fetch time. Catches hallucinated or drifted citations before an agent relies on them.\n\nLimits: Up to 20 claims per call (paid) or 3 (free tier); public http(s) URLs only; 2 MB per page.\nPrice: US$0.03 per successful call, paid in USDC via x402 (base, solana). Unpaid requests receive HTTP 402 with payment requirements; failed calls are not charged.","tags":["verification","citations","fact-check","research","grounding"],"x-x402":{"price":"$0.03","currency":"USDC","networks":["base","solana"]},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.03","currency":"USD"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["claims"],"properties":{"claims":{"type":"array","items":{"type":"object","required":["quote","url"],"properties":{"id":{"type":"string"},"quote":{"type":"string"},"url":{"type":"string"}}}}}},"example":{"claims":[{"id":"c1","quote":"This domain is for use in documentation examples","url":"https://example.com/"}]}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input (not charged)"},"402":{"description":"Payment required (x402)"},"413":{"description":"Input too large"}}}},"/free/verify-citations":{"post":{"security":[],"operationId":"verifyCitationsFree","summary":"Citation and quote verification (free tier)","description":"Free tier with smaller limits and a daily per-IP quota. Up to 20 claims per call (paid) or 3 (free tier); public http(s) URLs only; 2 MB per page.","tags":["verification","citations","fact-check","research","grounding"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["claims"],"properties":{"claims":{"type":"array","items":{"type":"object","required":["quote","url"],"properties":{"id":{"type":"string"},"quote":{"type":"string"},"url":{"type":"string"}}}}}},"example":{"claims":[{"id":"c1","quote":"This domain is for use in documentation examples","url":"https://example.com/"}]}}}},"responses":{"200":{"description":"Result"},"429":{"description":"Daily free quota used; use the paid endpoint"}}}},"/v1/agent-readiness":{"post":{"operationId":"agentReadiness","summary":"AI & agent readiness audit for a website","description":"Audits how discoverable and usable a domain is for AI assistants and autonomous agents: AI crawler access in robots.txt (GPTBot, ClaudeBot, PerplexityBot, Google-Extended and others), llms.txt, sitemap, homepage metadata and schema.org JSON-LD, A2A Agent Card, MCP and OpenAPI discovery, and x402 payment readiness. Returns a 0-100 score, every check with evidence, and prioritised fixes.\n\nLimits: One public domain per call; fetches at most 10 URLs.\nPrice: US$0.20 per successful call, paid in USDC via x402 (base, solana). Unpaid requests receive HTTP 402 with payment requirements; failed calls are not charged.","tags":["seo","geo","ai-visibility","llms.txt","agent-card","mcp","x402","audit"],"x-x402":{"price":"$0.20","currency":"USDC","networks":["base","solana"]},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.20","currency":"USD"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","description":"Domain or https URL, e.g. example.com"}}},"example":{"domain":"example.com"}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input (not charged)"},"402":{"description":"Payment required (x402)"},"413":{"description":"Input too large"}}}},"/free/agent-readiness":{"post":{"security":[],"operationId":"agentReadinessFree","summary":"AI & agent readiness audit for a website (free tier)","description":"Free tier with smaller limits and a daily per-IP quota. One public domain per call; fetches at most 10 URLs.","tags":["seo","geo","ai-visibility","llms.txt","agent-card","mcp","x402","audit"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","description":"Domain or https URL, e.g. example.com"}}},"example":{"domain":"example.com"}}}},"responses":{"200":{"description":"Result"},"429":{"description":"Daily free quota used; use the paid endpoint"}}}},"/v1/extract-requirements":{"post":{"operationId":"extractRequirements","summary":"Source-linked requirements extraction","description":"Extracts obligations (must/shall/required), prohibitions, recommendations, deadlines, submission instructions and evaluation criteria from tender, RFP, contract or policy text. Every item carries exact character offsets and its section heading so another agent can cite it, plus extracted dates, money amounts and percentages. Deterministic; no model calls.\n\nLimits: Up to 500,000 characters (paid) or 30,000 (free tier). Plain text input; convert PDFs first.\nPrice: US$0.04 per successful call, paid in USDC via x402 (base, solana). Unpaid requests receive HTTP 402 with payment requirements; failed calls are not charged.","tags":["extraction","requirements","tender","rfp","compliance","contracts"],"x-x402":{"price":"$0.04","currency":"USDC","networks":["base","solana"]},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.04","currency":"USD"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string"},"source":{"type":"string","description":"Optional source label echoed back."}}},"example":{"text":"1. Submission\nResponses must be lodged by 5:00pm AEST on 14 November 2026. Tenderers shall not exceed 20 pages.\n2. Evaluation\nPrice is weighted 40%."}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input (not charged)"},"402":{"description":"Payment required (x402)"},"413":{"description":"Input too large"}}}},"/free/extract-requirements":{"post":{"security":[],"operationId":"extractRequirementsFree","summary":"Source-linked requirements extraction (free tier)","description":"Free tier with smaller limits and a daily per-IP quota. Up to 500,000 characters (paid) or 30,000 (free tier). Plain text input; convert PDFs first.","tags":["extraction","requirements","tender","rfp","compliance","contracts"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string"},"source":{"type":"string","description":"Optional source label echoed back."}}},"example":{"text":"1. Submission\nResponses must be lodged by 5:00pm AEST on 14 November 2026. Tenderers shall not exceed 20 pages.\n2. Evaluation\nPrice is weighted 40%."}}}},"responses":{"200":{"description":"Result"},"429":{"description":"Daily free quota used; use the paid endpoint"}}}},"/v1/validate-json":{"post":{"operationId":"validateJson","summary":"JSON Schema validation","description":"Validates a JSON document against a JSON Schema (core 2020-12 keywords incl. $ref/$defs, anyOf/oneOf/allOf, formats) and returns every error with instance path, schema path and a plain-language message. Use it as an independent gate on structured LLM output before acting on it.\n\nLimits: Document and schema up to 1 MB combined (paid) or 100 KB (free tier).\nPrice: US$0.005 per successful call, paid in USDC via x402 (base, solana). Unpaid requests receive HTTP 402 with payment requirements; failed calls are not charged.","tags":["validation","json-schema","structured-output","qa"],"x-x402":{"price":"$0.005","currency":"USDC","networks":["base","solana"]},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.005","currency":"USD"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["schema","data"],"properties":{"schema":{"type":"object"},"data":{}}},"example":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email"}}},"data":{"email":"nope"}}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input (not charged)"},"402":{"description":"Payment required (x402)"},"413":{"description":"Input too large"}}}},"/free/validate-json":{"post":{"security":[],"operationId":"validateJsonFree","summary":"JSON Schema validation (free tier)","description":"Free tier with smaller limits and a daily per-IP quota. Document and schema up to 1 MB combined (paid) or 100 KB (free tier).","tags":["validation","json-schema","structured-output","qa"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["schema","data"],"properties":{"schema":{"type":"object"},"data":{}}},"example":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email"}}},"data":{"email":"nope"}}}}},"responses":{"200":{"description":"Result"},"429":{"description":"Daily free quota used; use the paid endpoint"}}}}}}