{"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":"Autonomous agent procurement and outcome fulfillment under a max budget","description":"Give INCOME 2 the result you need and your maximum budget. HYDRA autonomously finds an agent/tool/service to complete the task, tries zero-dollar proof-of-work fulfillment first, and can route supported paid work through buyer-signed non-custodial x402. Useful when you want a completed result under budget, need to find the best available agent or tool, want to outsource a task automatically, or are willing to pay up to a maximum amount for fulfillment. The buyer wallet signs locally; HYDRA never receives a 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"}},"tags":["agent procurement","outcome routing","autonomous fulfillment"],"x-intents":["do this task for me under budget","get this result for a maximum budget","find an agent to complete this task","find and pay the best tool for this job","cheapest reliable agent for this task","autonomous task fulfillment","agent procurement","buy a completed result from an agent","need this result willing to pay","outsource task to ai agent","route task to service","completed result under budget","webpage article to clean markdown","x402 purchase safety","prevent duplicate x402 payment","retry payment safely","prompt injection security scan","json data quality audit","website metadata audit"],"x-keywords":["outcome","buyer-intent","procurement","routing","autonomous","budget","demand","task-fulfillment","agent-procurement","completed-result","under-budget","find-agent","find-tool","buy-result","outsource-task","reliable-agent","max-budget","willing-to-pay"]},"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"}}}}}}