{"openapi":"3.1.0","info":{"title":"CentStream","version":"1.0.0","description":"Paid microservices for AI agents. Monetized with the x402 protocol (HTTP 402 + USDC on base). No API keys: each 402 response contains payment details; sign and retry with X-PAYMENT.","x-payment-protocol":{"name":"x402","version":1,"facilitator":"https://facilitator.payai.network"}},"servers":[{"url":"/"}],"paths":{"/health":{"get":{"summary":"Service and upstream status (free)","responses":{"200":{"description":"OK"}}}},"/v1/crypto/price":{"get":{"summary":"Crypto prices","parameters":[{"name":"symbols","in":"query","required":false,"schema":{"type":"string","example":"btc,eth"},"description":"Comma list: btc, eth, sol, xrp, doge, bnb, ada, link, ton, trx (max 10)"}],"responses":{"200":{"description":"Paid response (requires x402 payment on retry)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"402":{"description":"Payment Required — sign USDC (EIP-3009) per the `accepts` block and retry with the X-PAYMENT header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Challenge"}}}},"429":{"description":"Rate limit exceeded (30 req/min per IP)"}},"x-payment":{"protocol":"x402","version":1,"scheme":"exact","network":"base","price":"$0.05","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x75F93F8aD9A437D415F277dEF4Cc268a8Bf1C45C","facilitator":"https://facilitator.payai.network"}}},"/v1/gas":{"get":{"summary":"Gas price","parameters":[{"name":"chain","in":"query","required":false,"schema":{"type":"string","enum":["base","ethereum"],"default":"base"}}],"responses":{"200":{"description":"Paid response (requires x402 payment on retry)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"402":{"description":"Payment Required — sign USDC (EIP-3009) per the `accepts` block and retry with the X-PAYMENT header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Challenge"}}}},"429":{"description":"Rate limit exceeded (30 req/min per IP)"}},"x-payment":{"protocol":"x402","version":1,"scheme":"exact","network":"base","price":"$0.05","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x75F93F8aD9A437D415F277dEF4Cc268a8Bf1C45C","facilitator":"https://facilitator.payai.network"}}},"/v1/fiat/rates":{"get":{"summary":"Fiat FX rates (ECB)","parameters":[{"name":"base","in":"query","required":false,"schema":{"type":"string","default":"usd"}}],"responses":{"200":{"description":"Paid response (requires x402 payment on retry)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"402":{"description":"Payment Required — sign USDC (EIP-3009) per the `accepts` block and retry with the X-PAYMENT header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Challenge"}}}},"429":{"description":"Rate limit exceeded (30 req/min per IP)"}},"x-payment":{"protocol":"x402","version":1,"scheme":"exact","network":"base","price":"$0.05","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x75F93F8aD9A437D415F277dEF4Cc268a8Bf1C45C","facilitator":"https://facilitator.payai.network"}}},"/v1/weather":{"get":{"summary":"Current weather","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","example":52.52}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","example":13.41}}],"responses":{"200":{"description":"Paid response (requires x402 payment on retry)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"402":{"description":"Payment Required — sign USDC (EIP-3009) per the `accepts` block and retry with the X-PAYMENT header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Challenge"}}}},"429":{"description":"Rate limit exceeded (30 req/min per IP)"}},"x-payment":{"protocol":"x402","version":1,"scheme":"exact","network":"base","price":"$0.05","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x75F93F8aD9A437D415F277dEF4Cc268a8Bf1C45C","facilitator":"https://facilitator.payai.network"}}},"/v1/ipinfo":{"get":{"summary":"Caller geolocation (Cloudflare data)","parameters":[],"responses":{"200":{"description":"Paid response (requires x402 payment on retry)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"402":{"description":"Payment Required — sign USDC (EIP-3009) per the `accepts` block and retry with the X-PAYMENT header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Challenge"}}}},"429":{"description":"Rate limit exceeded (30 req/min per IP)"}},"x-payment":{"protocol":"x402","version":1,"scheme":"exact","network":"base","price":"$0.05","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x75F93F8aD9A437D415F277dEF4Cc268a8Bf1C45C","facilitator":"https://facilitator.payai.network"}}},"/v1/qr":{"get":{"summary":"QR code as SVG","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string","maxLength":512}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":64,"maximum":1024,"default":256}}],"responses":{"200":{"description":"Paid response (requires x402 payment on retry)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"402":{"description":"Payment Required — sign USDC (EIP-3009) per the `accepts` block and retry with the X-PAYMENT header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Challenge"}}}},"429":{"description":"Rate limit exceeded (30 req/min per IP)"}},"x-payment":{"protocol":"x402","version":1,"scheme":"exact","network":"base","price":"$0.05","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x75F93F8aD9A437D415F277dEF4Cc268a8Bf1C45C","facilitator":"https://facilitator.payai.network"}}},"/v1/meta":{"get":{"summary":"OpenGraph metadata of a page","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri"}}],"responses":{"200":{"description":"Paid response (requires x402 payment on retry)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"402":{"description":"Payment Required — sign USDC (EIP-3009) per the `accepts` block and retry with the X-PAYMENT header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Challenge"}}}},"429":{"description":"Rate limit exceeded (30 req/min per IP)"}},"x-payment":{"protocol":"x402","version":1,"scheme":"exact","network":"base","price":"$0.05","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x75F93F8aD9A437D415F277dEF4Cc268a8Bf1C45C","facilitator":"https://facilitator.payai.network"}}},"/v1/batch/s5":{"post":{"summary":"Batch: up to 5 lookups in ONE paid call ($0.25 total)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchRequest"}}}},"responses":{"200":{"description":"Paid batch response (5 lookups max, one x402 payment)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"402":{"description":"Payment Required — sign USDC (EIP-3009) per the `accepts` block and retry with the X-PAYMENT header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Challenge"}}}},"429":{"description":"Rate limit exceeded (30 req/min per IP)"}},"x-payment":{"protocol":"x402","version":1,"scheme":"exact","network":"base","price":"$0.25","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x75F93F8aD9A437D415F277dEF4Cc268a8Bf1C45C","facilitator":"https://facilitator.payai.network"}}},"/v1/batch/s20":{"post":{"summary":"Batch: up to 20 lookups in ONE paid call ($1.00 total)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchRequest"}}}},"responses":{"200":{"description":"Paid batch response (20 lookups max, one x402 payment)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"402":{"description":"Payment Required — sign USDC (EIP-3009) per the `accepts` block and retry with the X-PAYMENT header","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Challenge"}}}},"429":{"description":"Rate limit exceeded (30 req/min per IP)"}},"x-payment":{"protocol":"x402","version":1,"scheme":"exact","network":"base","price":"$1.00","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x75F93F8aD9A437D415F277dEF4Cc268a8Bf1C45C","facilitator":"https://facilitator.payai.network"}}}},"components":{"schemas":{"Envelope":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{"type":"object"},"meta":{"type":"object","properties":{"source":{"type":"string"},"cached":{"type":"boolean"},"stale":{"type":"boolean"},"ageSeconds":{"type":"integer"},"fetchedAt":{"type":"string","format":"date-time"}}}}},"Challenge":{"type":"object","properties":{"x402Version":{"type":"integer","example":1},"error":{"type":"string"},"accepts":{"type":"array","items":{"type":"object"}}}},"BatchRequest":{"type":"object","required":["requests"],"properties":{"requests":{"type":"array","items":{"type":"object","required":["path"],"properties":{"path":{"type":"string","description":"A paid GET endpoint, e.g. /v1/hash or /v1/crypto/price","example":"/v1/hash"},"params":{"type":"object","description":"Query parameters for that endpoint","additionalProperties":{"type":"string"},"example":{"text":"hello","algo":"sha-256"}}}}}}}}}}