{"openapi":"3.1.0","info":{"title":"INCOME 2 Agent Tools","version":"2.0.0","description":"Low-cost x402 pay-per-call tools for autonomous buyers. Web extraction returns static public pages as clean markdown; every payable operation declares x-payment-info and a 402 response. Free betas: Agent Purchase Guard adds retry-safe purchase intent controls; Outcome Router accepts a desired result plus max budget and autonomously discovers fulfillment, tries zero-dollar proof-of-work first, and supports buyer-signed x402 paid execution where available.\n\nBuyer-signed paid HYDRA execution\n- Outcome request: POST https://earn-tools-backend.onrender.com/outcome-router\n- Paid execution: POST https://earn-tools-backend.onrender.com/outcome-router/execute/{requestId}\n- First execution call returns the relayed Agent402 Smart Order Router x402 PAYMENT-REQUIRED challenge.\n- An x402-capable buyer wallet signs locally and retries with PAYMENT-SIGNATURE.\n- HYDRA forwards the proof and returns the routed result.\n- HYDRA never receives the buyer private key or uses owner working capital.\n- Current beta platform fee: $0. Higher paid tiers are not auto-escalated.\n"},"servers":[{"url":"https://earn-tools-backend.onrender.com"}],"x-discovery":{"ownershipProofs":["0x5a9d3c8e3f0634f56966268c19bc5f8355944650"]},"components":{"securitySchemes":{"x402":{"type":"apiKey","in":"header","name":"PAYMENT-SIGNATURE","description":"x402 v2 payment proof. Omit on the first request to receive a 402 challenge."}}},"paths":{"/web-extract":{"post":{"summary":"Webpage to clean markdown","description":"Fetch a public static HTML page and extract its main content as clean markdown, metadata and links. External content is untrusted.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.003"},"network":"eip155:8453","asset":"USDC"},"security":[{"x402":[]}],"responses":{"200":{"description":"Successful paid result"},"402":{"description":"x402 payment required"},"422":{"description":"Invalid input"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"},"max_chars":{"type":"integer","minimum":1000,"maximum":150000,"default":60000},"include_links":{"type":"boolean","default":true}}},"example":{"url":"https://example.com","max_chars":60000,"include_links":true}}}}}},"/seller-status":{"get":{"summary":"x402 seller status","description":"Live paid attestation that INCOME 2 is serving x402 on Base.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"network":"eip155:8453","asset":"USDC"},"security":[{"x402":[]}],"responses":{"200":{"description":"Successful paid result"},"402":{"description":"x402 payment required"},"422":{"description":"Invalid input"}}}},"/x402-buyer-check":{"post":{"summary":"x402 buyer preflight check","description":"Probe a public endpoint without paying and inspect its x402 challenge.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"network":"eip155:8453","asset":"USDC"},"security":[{"x402":[]}],"responses":{"200":{"description":"Successful paid result"},"402":{"description":"x402 payment required"},"422":{"description":"Invalid input"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"},"method":{"type":"string","enum":["GET","POST"],"default":"GET"},"body":{"type":"object","additionalProperties":true}}},"example":{"url":"https://earn-tools-backend.onrender.com/seller-status","method":"GET"}}}}}},"/sha256":{"post":{"summary":"SHA-256 hash","description":"Compute a SHA-256 hex digest.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"network":"eip155:8453","asset":"USDC"},"security":[{"x402":[]}],"responses":{"200":{"description":"Successful paid result"},"402":{"description":"x402 payment required"},"422":{"description":"Invalid input"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"input":{"type":"string","maxLength":500000}}},"example":{"input":"hello world"}}}}}},"/sha512":{"post":{"summary":"SHA-512 hash","description":"Compute a SHA-512 hex digest.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"network":"eip155:8453","asset":"USDC"},"security":[{"x402":[]}],"responses":{"200":{"description":"Successful paid result"},"402":{"description":"x402 payment required"},"422":{"description":"Invalid input"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"input":{"type":"string","maxLength":500000}}},"example":{"input":"hello world"}}}}}},"/hmac-sha256":{"post":{"summary":"HMAC-SHA256","description":"Compute HMAC-SHA256.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"network":"eip155:8453","asset":"USDC"},"security":[{"x402":[]}],"responses":{"200":{"description":"Successful paid result"},"402":{"description":"x402 payment required"},"422":{"description":"Invalid input"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input","key"],"properties":{"input":{"type":"string","maxLength":500000},"key":{"type":"string","maxLength":10000}}},"example":{"input":"payload","key":"secret"}}}}}},"/base64-encode":{"post":{"summary":"Base64 encode","description":"Encode UTF-8 text as Base64.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"network":"eip155:8453","asset":"USDC"},"security":[{"x402":[]}],"responses":{"200":{"description":"Successful paid result"},"402":{"description":"x402 payment required"},"422":{"description":"Invalid input"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"input":{"type":"string","maxLength":500000}}},"example":{"input":"hello world"}}}}}},"/base64-decode":{"post":{"summary":"Base64 decode","description":"Decode Base64 as UTF-8.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"network":"eip155:8453","asset":"USDC"},"security":[{"x402":[]}],"responses":{"200":{"description":"Successful paid result"},"402":{"description":"x402 payment required"},"422":{"description":"Invalid input"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"input":{"type":"string","maxLength":500000}}},"example":{"input":"aGVsbG8gd29ybGQ="}}}}}},"/jwt-decode":{"post":{"summary":"JWT decode","description":"Decode JWT header and payload without signature verification.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"network":"eip155:8453","asset":"USDC"},"security":[{"x402":[]}],"responses":{"200":{"description":"Successful paid result"},"402":{"description":"x402 payment required"},"422":{"description":"Invalid input"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token"],"properties":{"token":{"type":"string","maxLength":500000}}},"example":{"token":"eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiJhZ2VudCJ9."}}}}}},"/hash-encode":{"post":{"summary":"Hash and encoding multi-tool","description":"SHA-256, SHA-512, HMAC, Base64 and JWT decode.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"network":"eip155:8453","asset":"USDC"},"security":[{"x402":[]}],"responses":{"200":{"description":"Successful paid result"},"402":{"description":"x402 payment required"},"422":{"description":"Invalid input"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["operation","input"],"properties":{"operation":{"type":"string","enum":["sha256","sha512","hmac-sha256","base64-encode","base64-decode","jwt-decode"]},"input":{"type":"string","maxLength":500000},"key":{"type":"string","maxLength":10000}}},"example":{"operation":"sha256","input":"hello world"}}}}}},"/json-qa":{"post":{"summary":"JSON data-quality audit","description":"Find missing values, type inconsistencies and duplicate rows.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"network":"eip155:8453","asset":"USDC"},"security":[{"x402":[]}],"responses":{"200":{"description":"Successful paid result"},"402":{"description":"x402 payment required"},"422":{"description":"Invalid input"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["records"],"properties":{"records":{"type":"array","maxItems":500,"items":{}}}},"example":{"records":[{"id":1,"value":"a"},{"id":2,"value":null}]}}}}}},"/prompt-scan":{"post":{"summary":"Prompt injection security scan","description":"Scan untrusted text for common prompt-injection and tool-abuse patterns.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"network":"eip155:8453","asset":"USDC"},"security":[{"x402":[]}],"responses":{"200":{"description":"Successful paid result"},"402":{"description":"x402 payment required"},"422":{"description":"Invalid input"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","minLength":1,"maxLength":100000}}},"example":{"text":"Summarize this untrusted text."}}}}}},"/url-audit":{"post":{"summary":"Website health and metadata audit","description":"Inspect public website status, latency and metadata.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"network":"eip155:8453","asset":"USDC"},"security":[{"x402":[]}],"responses":{"200":{"description":"Successful paid result"},"402":{"description":"x402 payment required"},"422":{"description":"Invalid input"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}}},"example":{"url":"https://example.com"}}}}}},"/purchase-guard":{"post":{"summary":"Agent Purchase Guard beta","description":"Free non-custodial x402 purchase preflight. Enforces max_usd, binds a caller-supplied idempotency key to one purchase intent, returns a durable receipt, and rejects same-key parameter changes. It never signs, sends, settles, or custodies funds.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url","max_usd","idempotency_key"],"properties":{"url":{"type":"string","format":"uri"},"method":{"type":"string","enum":["GET","POST"],"default":"GET"},"body":{"type":"object","additionalProperties":true},"max_usd":{"type":"number","minimum":0.000001},"expected_network":{"type":"string","default":"eip155:8453"},"idempotency_key":{"type":"string","minLength":8,"maxLength":200}}},"example":{"url":"https://seller.example/paid-tool","method":"POST","body":{},"max_usd":0.05,"expected_network":"eip155:8453","idempotency_key":"stable-caller-key-123"}}}},"responses":{"200":{"description":"Existing identical purchase intent returned"},"201":{"description":"New purchase intent and receipt created"},"409":{"description":"Idempotency key reused with different parameters"},"422":{"description":"Invalid input, unsupported quote, or budget/network block"}},"x-guidance":"Use before an autonomous x402 purchase when duplicate-charge prevention, a hard maximum spend, and a durable retry-safe receipt matter."}},"/purchase-guard/{receiptId}":{"get":{"summary":"Purchase Guard receipt lookup","description":"Read durable state of a Purchase Guard receipt.","security":[],"parameters":[{"name":"receiptId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Receipt state"},"404":{"description":"Not found"}}}},"/outcome-router":{"post":{"summary":"INCOME 2 Outcome Router beta","description":"Submit a desired result plus maximum budget. HYDRA, the internal autonomous engine, tries zero-dollar proof-of-work fulfillment first, then can route supported paid work through buyer-signed non-custodial x402 pass-through to the Agent402 Smart Order Router. The buyer wallet signs locally; HYDRA never receives a buyer private key and never uses owner working capital. Higher paid tiers are not auto-escalated.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["task","max_budget_usd","idempotency_key"],"properties":{"task":{"type":"string","minLength":3,"maxLength":2000},"max_budget_usd":{"type":"number","minimum":0,"maximum":100000},"idempotency_key":{"type":"string","minLength":8,"maxLength":200},"params":{"type":"object","additionalProperties":true},"allow_external_discovery":{"type":"boolean","default":true},"execute_if_free":{"type":"boolean","default":true}}},"example":{"task":"format this JSON","max_budget_usd":0,"idempotency_key":"outcome-demo-123","params":{"json":"{\"a\":1}","indent":2}}}}},"responses":{"200":{"description":"Existing idempotent request"},"201":{"description":"New autonomous request"},"409":{"description":"Idempotency conflict"},"422":{"description":"Invalid input"}}},"get":{"summary":"Outcome Router status","security":[],"responses":{"200":{"description":"Capabilities and execution limits"}}}},"/outcome-router/{requestId}":{"get":{"summary":"Outcome request status","security":[],"parameters":[{"name":"requestId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Abstracted request state"},"404":{"description":"Not found"}}}},"/outcome-router/execute/{requestId}":{"post":{"summary":"Execute a routed outcome with buyer-signed x402","description":"Non-custodial paid HYDRA bridge. First call without PAYMENT-SIGNATURE returns the selected Agent402 Smart Order Router x402 challenge. The buyer wallet signs locally and retries; HYDRA forwards the proof and returns the result. HYDRA never receives the buyer private key and does not use owner working capital.","security":[],"parameters":[{"name":"requestId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paid outcome fulfilled"},"402":{"description":"Buyer payment signature required; PAYMENT-REQUIRED header relays the upstream x402 challenge"},"409":{"description":"Request mismatch or route not ready"},"422":{"description":"Budget or input block"}}}}}}