{"openapi":"3.1.0","info":{"title":"Flat-rate LLM and EVM toolkit","version":"2.0.0","description":"69 paid endpoints with no metering, no API key and no account. Each endpoint has one flat price per call, whatever the size of the request: LLM completions with automatic failover across several large models, read-only EVM tooling over Base, Ethereum, Polygon, Arbitrum and Optimism, and pure crypto utilities that touch no network.","x-guidance":"Every endpoint is a POST with a JSON body and has ONE flat price per call - the same for a 10-token request and a 4000-token one - so there is nothing to estimate before calling; the exact amount is in each operation's x-payment-info. Send the example body shown in the operation to see the shape of the answer. For LLM work use POST /v2/inferencia with a 'prompt'. For chain reads use /v1/evm/*: they all take an optional 'chain' of base, ethereum, polygon, arbitrum or optimism, and default to base. For hashing, address checksums, unit conversion and signature recovery use /v1/util/*, which touch no network and answer in under a millisecond. A 502 means a payment went through but an upstream public RPC refused; the body names which providers failed and retrying usually works.","contact":{"email":"AutomatIA.sab@gmail.com"}},"servers":[{"url":"https://flat-rate-llm.kikoribera03.workers.dev"}],"paths":{"/v2/inferencia":{"post":{"operationId":"v2Inferencia","summary":"Flat-rate LLM - LLM inference at a flat $1","description":"LLM inference at a flat $1.00 per call, with no account, no API key and no token metering. POST a prompt, get the completion: the same price for 10 tokens or 4000, while metered gateways scale with usage. Automatic failover across several large models; typical response under 1s. Pay per call in USDC over x402 - nothing to sign up for.","tags":["llm completion","llm","inference","ai","text generation","completion"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"1.000000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"respuesta":{"type":"string"},"modelo":{"type":"string"},"segundos":{"type":"number"}}},"example":{"respuesta":"x402 is an HTTP-native payment protocol...","modelo":"@cf/meta/llama-3.3-70b-instruct-fp8-fast","segundos":0.9}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","description":"The request for the model. Up to 24000 characters."},"sistema":{"type":"string","description":"Optional system instruction."},"maxTokens":{"type":"number","description":"Output token cap, up to 4000. Does not change the price."}},"required":["prompt"]},"example":{"prompt":"Summarise in one line what the x402 protocol is."}}}}}},"/v1/evm/balance":{"post":{"operationId":"v1EvmBalance","summary":"EVM native balance - Native coin balance (ETH, MATIC","description":"Native coin balance (ETH, MATIC...) for any address, on Base, Ethereum, Polygon, Arbitrum or Optimism. Flat price, no rate limits, no API key. Via eth_getBalance.","tags":["wallet balance","native balance","balance","eth balance","evm","wallet","rpc","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"chain":{"type":"string"},"wei":{"type":"string"},"ether":{"type":"number"}}},"example":{"address":"0xd8dA...","chain":"eip155:8453","wei":"1234567890","ether":1.23456789}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"0x-prefixed address to look up."},"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism. Defaults to base."}},"required":["address"]},"example":{"address":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","chain":"base"}}}}},"get":{"operationId":"v1EvmBalanceGet","summary":"EVM native balance - Native coin balance (ETH, MATIC","description":"Native coin balance (ETH, MATIC...) for any address, on Base, Ethereum, Polygon, Arbitrum or Optimism. Flat price, no rate limits, no API key. Via eth_getBalance.","tags":["wallet balance","native balance","balance","eth balance","evm","wallet","rpc","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"chain":{"type":"string"},"wei":{"type":"string"},"ether":{"type":"number"}}},"example":{"address":"0xd8dA...","chain":"eip155:8453","wei":"1234567890","ether":1.23456789}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"address","in":"query","required":true,"description":"0x-prefixed address to look up.","schema":{"type":"string"},"example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"},{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism. Defaults to base.","schema":{"type":"string"},"example":"base"}]}},"/v1/evm/erc20-balance":{"post":{"operationId":"v1EvmErc20Balance","summary":"ERC20 token balance - ERC20 token balance for any wallet - USDC, USDT, DAI or any token - via balanceOf","description":"ERC20 token balance for any wallet - USDC, USDT, DAI or any token - via balanceOf. Returns the raw amount and the decimals so you can format it. Via eth_call (balanceOf).","tags":["erc20 balance","token balance","erc20","balanceof","usdc","token","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"raw":{"type":"string"},"decimals":{"type":"number"},"amount":{"type":"number"},"symbol":{"type":"string"}}},"example":{"raw":"1010923","decimals":6,"amount":1.010923,"symbol":"USDC"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"Wallet to look up."},"token":{"type":"string","description":"ERC20 contract address."},"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}},"required":["address","token"]},"example":{"address":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","token":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","chain":"base"}}}}},"get":{"operationId":"v1EvmErc20BalanceGet","summary":"ERC20 token balance - ERC20 token balance for any wallet - USDC, USDT, DAI or any token - via balanceOf","description":"ERC20 token balance for any wallet - USDC, USDT, DAI or any token - via balanceOf. Returns the raw amount and the decimals so you can format it. Via eth_call (balanceOf).","tags":["erc20 balance","token balance","erc20","balanceof","usdc","token","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"raw":{"type":"string"},"decimals":{"type":"number"},"amount":{"type":"number"},"symbol":{"type":"string"}}},"example":{"raw":"1010923","decimals":6,"amount":1.010923,"symbol":"USDC"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"address","in":"query","required":true,"description":"Wallet to look up.","schema":{"type":"string"},"example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"},{"name":"token","in":"query","required":true,"description":"ERC20 contract address.","schema":{"type":"string"},"example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"}]}},"/v1/evm/token-info":{"post":{"operationId":"v1EvmTokenInfo","summary":"ERC20 token info - Name, symbol, decimals and total supply of any ERC20 contract in one call","description":"Name, symbol, decimals and total supply of any ERC20 contract in one call. Useful to label a token address before showing it to a user. Via eth_call.","tags":["token metadata","token info","erc20","symbol","decimals","supply","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"totalSupply":{"type":"string"}}},"example":{"name":"USD Coin","symbol":"USDC","decimals":6,"totalSupply":"5000000000000"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"ERC20 contract address."},"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}},"required":["token"]},"example":{"token":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","chain":"base"}}}}},"get":{"operationId":"v1EvmTokenInfoGet","summary":"ERC20 token info - Name, symbol, decimals and total supply of any ERC20 contract in one call","description":"Name, symbol, decimals and total supply of any ERC20 contract in one call. Useful to label a token address before showing it to a user. Via eth_call.","tags":["token metadata","token info","erc20","symbol","decimals","supply","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"totalSupply":{"type":"string"}}},"example":{"name":"USD Coin","symbol":"USDC","decimals":6,"totalSupply":"5000000000000"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"token","in":"query","required":true,"description":"ERC20 contract address.","schema":{"type":"string"},"example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"}]}},"/v1/evm/token-price":{"post":{"operationId":"v1EvmTokenPrice","summary":"DEX token price, with the pool that produced it - Spot price of any ERC20 read straight from the deepest Uniswap V3 pool against USDC, on Base, Ethereum, Polygon, Arbitrum or Optimism","description":"Spot price of any ERC20 read straight from the deepest Uniswap V3 pool against USDC, on Base, Ethereum, Polygon, Arbitrum or Optimism. Returns the pool address, fee tier, liquidity, sqrtPriceX96, tick and block, so the number can be audited instead of trusted. No aggregator and no API key: the source is the chain itself. Via eth_call.","tags":["token price","dex price","uniswap","spot price","price feed","onchain price","erc20","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"price":{"type":"string"},"quoteSymbol":{"type":"string"},"pool":{"type":"string"},"feeTier":{"type":"number"},"liquidity":{"type":"string"},"blockNumber":{"type":"number"}}},"example":{"price":"2528.041","quoteSymbol":"USDC","pool":"0xd0b53d9277642d899df5c87a3966a349a798f224","feeTier":500,"liquidity":"1102179176391610992","blockNumber":51047956}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"ERC20 contract address to price."},"quote":{"type":"string","description":"Token to price it against. Defaults to the chain's native USDC."},"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}},"required":["token"]},"example":{"token":"0x4200000000000000000000000000000000000006","chain":"base"}}}}},"get":{"operationId":"v1EvmTokenPriceGet","summary":"DEX token price, with the pool that produced it - Spot price of any ERC20 read straight from the deepest Uniswap V3 pool against USDC, on Base, Ethereum, Polygon, Arbitrum or Optimism","description":"Spot price of any ERC20 read straight from the deepest Uniswap V3 pool against USDC, on Base, Ethereum, Polygon, Arbitrum or Optimism. Returns the pool address, fee tier, liquidity, sqrtPriceX96, tick and block, so the number can be audited instead of trusted. No aggregator and no API key: the source is the chain itself. Via eth_call.","tags":["token price","dex price","uniswap","spot price","price feed","onchain price","erc20","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"price":{"type":"string"},"quoteSymbol":{"type":"string"},"pool":{"type":"string"},"feeTier":{"type":"number"},"liquidity":{"type":"string"},"blockNumber":{"type":"number"}}},"example":{"price":"2528.041","quoteSymbol":"USDC","pool":"0xd0b53d9277642d899df5c87a3966a349a798f224","feeTier":500,"liquidity":"1102179176391610992","blockNumber":51047956}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"token","in":"query","required":true,"description":"ERC20 contract address to price.","schema":{"type":"string"},"example":"0x4200000000000000000000000000000000000006"},{"name":"quote","in":"query","required":false,"description":"Token to price it against. Defaults to the chain's native USDC.","schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"}]}},"/v1/evm/gas":{"post":{"operationId":"v1EvmGas","summary":"EVM gas price - Current gas price and base fee for any supported chain, in wei and gwei, plus the cost estimate of a plain transfer","description":"Current gas price and base fee for any supported chain, in wei and gwei, plus the cost estimate of a plain transfer. For agents planning a transaction. Via eth_gasPrice.","tags":["gas price","gas","gwei","gas fees","evm","fees","rpc","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"gasPriceWei":{"type":"string"},"gasPriceGwei":{"type":"number"},"transferCostEther":{"type":"number"}}},"example":{"gasPriceWei":"12000000","gasPriceGwei":0.012,"transferCostEther":2.52e-7}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}}},"example":{"chain":"base"}}}}},"get":{"operationId":"v1EvmGasGet","summary":"EVM gas price - Current gas price and base fee for any supported chain, in wei and gwei, plus the cost estimate of a plain transfer","description":"Current gas price and base fee for any supported chain, in wei and gwei, plus the cost estimate of a plain transfer. For agents planning a transaction. Via eth_gasPrice.","tags":["gas price","gas","gwei","gas fees","evm","fees","rpc","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"gasPriceWei":{"type":"string"},"gasPriceGwei":{"type":"number"},"transferCostEther":{"type":"number"}}},"example":{"gasPriceWei":"12000000","gasPriceGwei":0.012,"transferCostEther":2.52e-7}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"}]}},"/v1/evm/block":{"post":{"operationId":"v1EvmBlock","summary":"EVM block height - Latest block height and timestamp of any supported chain, plus how old the chain head is in seconds","description":"Latest block height and timestamp of any supported chain, plus how old the chain head is in seconds. Tells an agent whether a node is in sync. Via eth_getBlockByNumber.","tags":["block number","block height","latest block","block","evm","monitoring","rpc","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"blockNumber":{"type":"number"},"timestamp":{"type":"number"},"ageSeconds":{"type":"number"}}},"example":{"blockNumber":51047956,"timestamp":1788886242,"ageSeconds":3}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}}},"example":{"chain":"base"}}}}},"get":{"operationId":"v1EvmBlockGet","summary":"EVM block height - Latest block height and timestamp of any supported chain, plus how old the chain head is in seconds","description":"Latest block height and timestamp of any supported chain, plus how old the chain head is in seconds. Tells an agent whether a node is in sync. Via eth_getBlockByNumber.","tags":["block number","block height","latest block","block","evm","monitoring","rpc","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"blockNumber":{"type":"number"},"timestamp":{"type":"number"},"ageSeconds":{"type":"number"}}},"example":{"blockNumber":51047956,"timestamp":1788886242,"ageSeconds":3}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"}]}},"/v1/evm/tx":{"post":{"operationId":"v1EvmTx","summary":"EVM transaction - Full transaction details by hash, merged with its receipt: from, to, value, gas used, status and block","description":"Full transaction details by hash, merged with its receipt: from, to, value, gas used, status and block. One call instead of two. Via eth_getTransactionByHash.","tags":["transaction lookup","transaction","tx","lookup","evm","rpc","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"status":{"type":"string"},"gasUsed":{"type":"number"},"blockNumber":{"type":"number"}}},"example":{"from":"0x2729...","to":"0x8335...","status":"success","gasUsed":65000,"blockNumber":51047900}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"hash":{"type":"string","description":"Transaction hash."},"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}},"required":["hash"]},"example":{"hash":"0x17f99c8d27a22958999b883d27e8a74b23bad5579832b269faf20ab884884ff3","chain":"base"}}}}},"get":{"operationId":"v1EvmTxGet","summary":"EVM transaction - Full transaction details by hash, merged with its receipt: from, to, value, gas used, status and block","description":"Full transaction details by hash, merged with its receipt: from, to, value, gas used, status and block. One call instead of two. Via eth_getTransactionByHash.","tags":["transaction lookup","transaction","tx","lookup","evm","rpc","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"status":{"type":"string"},"gasUsed":{"type":"number"},"blockNumber":{"type":"number"}}},"example":{"from":"0x2729...","to":"0x8335...","status":"success","gasUsed":65000,"blockNumber":51047900}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"hash","in":"query","required":true,"description":"Transaction hash.","schema":{"type":"string"},"example":"0x17f99c8d27a22958999b883d27e8a74b23bad5579832b269faf20ab884884ff3"},{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"}]}},"/v1/evm/nonce":{"post":{"operationId":"v1EvmNonce","summary":"EVM address nonce - Next transaction nonce for any address, and whether the address is a contract","description":"Next transaction nonce for any address, and whether the address is a contract. What an agent needs before signing a transaction. Via eth_getTransactionCount.","tags":["nonce","account nonce","transaction count","wallet","evm","rpc","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"nonce":{"type":"number"},"pendingNonce":{"type":"number"},"isContract":{"type":"boolean"}}},"example":{"nonce":42,"pendingNonce":43,"isContract":false}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"Address to look up."},"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}},"required":["address"]},"example":{"address":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","chain":"base"}}}}},"get":{"operationId":"v1EvmNonceGet","summary":"EVM address nonce - Next transaction nonce for any address, and whether the address is a contract","description":"Next transaction nonce for any address, and whether the address is a contract. What an agent needs before signing a transaction. Via eth_getTransactionCount.","tags":["nonce","account nonce","transaction count","wallet","evm","rpc","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"nonce":{"type":"number"},"pendingNonce":{"type":"number"},"isContract":{"type":"boolean"}}},"example":{"nonce":42,"pendingNonce":43,"isContract":false}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"address","in":"query","required":true,"description":"Address to look up.","schema":{"type":"string"},"example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"},{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"}]}},"/v1/evm/is-contract":{"post":{"operationId":"v1EvmIsContract","summary":"Contract or wallet - Tells whether an address is a smart contract or a plain wallet, and how big its bytecode is","description":"Tells whether an address is a smart contract or a plain wallet, and how big its bytecode is. A cheap safety check before sending funds. Via eth_getCode.","tags":["is contract","contract or wallet","eoa","bytecode","contract","security","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"isContract":{"type":"boolean"},"bytecodeBytes":{"type":"number"}}},"example":{"isContract":true,"bytecodeBytes":2914}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"Address to inspect."},"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}},"required":["address"]},"example":{"address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","chain":"base"}}}}},"get":{"operationId":"v1EvmIsContractGet","summary":"Contract or wallet - Tells whether an address is a smart contract or a plain wallet, and how big its bytecode is","description":"Tells whether an address is a smart contract or a plain wallet, and how big its bytecode is. A cheap safety check before sending funds. Via eth_getCode.","tags":["is contract","contract or wallet","eoa","bytecode","contract","security","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"isContract":{"type":"boolean"},"bytecodeBytes":{"type":"number"}}},"example":{"isContract":true,"bytecodeBytes":2914}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"address","in":"query","required":true,"description":"Address to inspect.","schema":{"type":"string"},"example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"}]}},"/v1/evm/chains":{"post":{"operationId":"v1EvmChains","summary":"Chain health check - Live health of every supported chain in one call: chain id, block height and how stale the head is","description":"Live health of every supported chain in one call: chain id, block height and how stale the head is. Use it to pick a chain that is actually responding. Via eth_getBlockByNumber.","tags":["chain health","rpc health","multichain","uptime","monitoring","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"chains":{"type":"array","items":{"type":"object"}}}},"example":{"chains":[{"chain":"eip155:8453","blockNumber":51047956,"ageSeconds":2,"ok":true}]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chain":{"type":"string","description":"Optional: check just one. base | ethereum | polygon | arbitrum | optimism. All of them when omitted."}}},"example":{}}}}},"get":{"operationId":"v1EvmChainsGet","summary":"Chain health check - Live health of every supported chain in one call: chain id, block height and how stale the head is","description":"Live health of every supported chain in one call: chain id, block height and how stale the head is. Use it to pick a chain that is actually responding. Via eth_getBlockByNumber.","tags":["chain health","rpc health","multichain","uptime","monitoring","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"chains":{"type":"array","items":{"type":"object"}}}},"example":{"chains":[{"chain":"eip155:8453","blockNumber":51047956,"ageSeconds":2,"ok":true}]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"chain","in":"query","required":false,"description":"Optional: check just one. base | ethereum | polygon | arbitrum | optimism. All of them when omitted.","schema":{"type":"string"}}]}},"/v1/evm/call":{"post":{"operationId":"v1EvmCall","summary":"Raw contract call - Runs any read-only contract call (eth_call) with your own calldata and returns the raw result, on five chains, with no API key and no rate limit","description":"Runs any read-only contract call (eth_call) with your own calldata and returns the raw result, on five chains, with no API key and no rate limit. The escape hatch for anything the typed endpoints do not cover.","tags":["eth_call","read contract","contract call","calldata","abi","contract","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"string"},"asUint":{"type":"string"}}},"example":{"result":"0x00000000000000000000000000000000000000000000000000000188f2a0c1e0","asUint":"1687451254752"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"to":{"type":"string","description":"Contract address to call."},"data":{"type":"string","description":"0x-prefixed calldata: 4-byte selector plus encoded arguments."},"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."},"from":{"type":"string","description":"Optional caller address, for calls that check msg.sender."},"block":{"type":"string","description":"Block tag or number. Defaults to latest."}},"required":["to","data"]},"example":{"to":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","data":"0x18160ddd","chain":"base"}}}}},"get":{"operationId":"v1EvmCallGet","summary":"Raw contract call - Runs any read-only contract call (eth_call) with your own calldata and returns the raw result, on five chains, with no API key and no rate limit","description":"Runs any read-only contract call (eth_call) with your own calldata and returns the raw result, on five chains, with no API key and no rate limit. The escape hatch for anything the typed endpoints do not cover.","tags":["eth_call","read contract","contract call","calldata","abi","contract","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"string"},"asUint":{"type":"string"}}},"example":{"result":"0x00000000000000000000000000000000000000000000000000000188f2a0c1e0","asUint":"1687451254752"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"to","in":"query","required":true,"description":"Contract address to call.","schema":{"type":"string"},"example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},{"name":"data","in":"query","required":true,"description":"0x-prefixed calldata: 4-byte selector plus encoded arguments.","schema":{"type":"string"},"example":"0x18160ddd"},{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"},{"name":"from","in":"query","required":false,"description":"Optional caller address, for calls that check msg.sender.","schema":{"type":"string"}},{"name":"block","in":"query","required":false,"description":"Block tag or number. Defaults to latest.","schema":{"type":"string"}}]}},"/v1/evm/receipt":{"post":{"operationId":"v1EvmReceipt","summary":"Transaction receipt - Receipt of a transaction: whether it succeeded or reverted, gas used, fee actually paid, and how many logs it emitted","description":"Receipt of a transaction: whether it succeeded or reverted, gas used, fee actually paid, and how many logs it emitted. The call that answers did my transaction work. Via eth_getTransactionReceipt.","tags":["transaction receipt","tx status","receipt","confirmed","reverted","transaction","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"found":{"type":"boolean"},"status":{"type":"string"},"gasUsed":{"type":"number"},"feePaidEther":{"type":"number"},"logs":{"type":"number"}}},"example":{"found":true,"status":"success","gasUsed":21000,"feePaidEther":4.41e-8,"logs":2}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"hash":{"type":"string","description":"32-byte transaction hash."},"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}},"required":["hash"]},"example":{"hash":"0x17f99c8d27a22958999b883d27e8a74b23bad5579832b269faf20ab884884ff3","chain":"base"}}}}},"get":{"operationId":"v1EvmReceiptGet","summary":"Transaction receipt - Receipt of a transaction: whether it succeeded or reverted, gas used, fee actually paid, and how many logs it emitted","description":"Receipt of a transaction: whether it succeeded or reverted, gas used, fee actually paid, and how many logs it emitted. The call that answers did my transaction work. Via eth_getTransactionReceipt.","tags":["transaction receipt","tx status","receipt","confirmed","reverted","transaction","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"found":{"type":"boolean"},"status":{"type":"string"},"gasUsed":{"type":"number"},"feePaidEther":{"type":"number"},"logs":{"type":"number"}}},"example":{"found":true,"status":"success","gasUsed":21000,"feePaidEther":4.41e-8,"logs":2}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"hash","in":"query","required":true,"description":"32-byte transaction hash.","schema":{"type":"string"},"example":"0x17f99c8d27a22958999b883d27e8a74b23bad5579832b269faf20ab884884ff3"},{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"}]}},"/v1/evm/estimate-gas":{"post":{"operationId":"v1EvmEstimateGas","summary":"Estimate gas - Estimates the gas a transaction would need and prices it at the current gas price, before you sign anything","description":"Estimates the gas a transaction would need and prices it at the current gas price, before you sign anything. Also the cheapest way to find out that a call would revert. Via eth_estimateGas.","tags":["estimate gas","gas estimate","simulate","revert check","gas","simulation","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"gas":{"type":"number"},"gasPriceWei":{"type":"string"},"costEther":{"type":"number"},"wouldRevert":{"type":"boolean"}}},"example":{"gas":21000,"gasPriceWei":"6000000","costEther":1.26e-7,"wouldRevert":false}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"to":{"type":"string","description":"Destination address."},"from":{"type":"string","description":"Sender address."},"data":{"type":"string","description":"Optional 0x calldata."},"value":{"type":"string","description":"Optional value in wei, as a decimal string."},"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}},"required":["to"]},"example":{"from":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","to":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","data":"0x18160ddd","chain":"base"}}}}},"get":{"operationId":"v1EvmEstimateGasGet","summary":"Estimate gas - Estimates the gas a transaction would need and prices it at the current gas price, before you sign anything","description":"Estimates the gas a transaction would need and prices it at the current gas price, before you sign anything. Also the cheapest way to find out that a call would revert. Via eth_estimateGas.","tags":["estimate gas","gas estimate","simulate","revert check","gas","simulation","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"gas":{"type":"number"},"gasPriceWei":{"type":"string"},"costEther":{"type":"number"},"wouldRevert":{"type":"boolean"}}},"example":{"gas":21000,"gasPriceWei":"6000000","costEther":1.26e-7,"wouldRevert":false}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"to","in":"query","required":true,"description":"Destination address.","schema":{"type":"string"},"example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},{"name":"from","in":"query","required":false,"description":"Sender address.","schema":{"type":"string"},"example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"},{"name":"data","in":"query","required":false,"description":"Optional 0x calldata.","schema":{"type":"string"},"example":"0x18160ddd"},{"name":"value","in":"query","required":false,"description":"Optional value in wei, as a decimal string.","schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"}]}},"/v1/evm/storage":{"post":{"operationId":"v1EvmStorage","summary":"Raw contract storage - Reads a raw storage slot of any contract, decoded as hex, integer and address","description":"Reads a raw storage slot of any contract, decoded as hex, integer and address. How you inspect proxy implementation slots, owners and paused flags that have no public getter. Via eth_getStorageAt.","tags":["contract storage","storage slot","eip1967","proxy","implementation","storage","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"string"},"asUint":{"type":"string"}}},"example":{"value":"0x0000000000000000000000000000000000000000000000000000000000000001","asUint":"1"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"Contract to read."},"slot":{"type":"string","description":"Slot number in decimal, or a 0x slot key such as an EIP-1967 hash."},"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}},"required":["address"]},"example":{"address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","slot":"0","chain":"base"}}}}},"get":{"operationId":"v1EvmStorageGet","summary":"Raw contract storage - Reads a raw storage slot of any contract, decoded as hex, integer and address","description":"Reads a raw storage slot of any contract, decoded as hex, integer and address. How you inspect proxy implementation slots, owners and paused flags that have no public getter. Via eth_getStorageAt.","tags":["contract storage","storage slot","eip1967","proxy","implementation","storage","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"string"},"asUint":{"type":"string"}}},"example":{"value":"0x0000000000000000000000000000000000000000000000000000000000000001","asUint":"1"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"address","in":"query","required":true,"description":"Contract to read.","schema":{"type":"string"},"example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},{"name":"slot","in":"query","required":false,"description":"Slot number in decimal, or a 0x slot key such as an EIP-1967 hash.","schema":{"type":"string"},"example":"0"},{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"}]}},"/v1/evm/erc20-allowance":{"post":{"operationId":"v1EvmErc20Allowance","summary":"ERC20 allowance - How much of a token a spender is still allowed to move on an owner's behalf, and whether that approval is unlimited","description":"How much of a token a spender is still allowed to move on an owner's behalf, and whether that approval is unlimited. The check to run before an approve, and the one that finds forgotten infinite approvals. Via eth_call (allowance).","tags":["erc20 allowance","allowance","approve","spender","usdc","erc20","security","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"raw":{"type":"string"},"amount":{"type":"number"},"decimals":{"type":"number"},"unlimited":{"type":"boolean"}}},"example":{"raw":"0","amount":0,"decimals":6,"unlimited":false}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"owner":{"type":"string","description":"Address that owns the tokens."},"spender":{"type":"string","description":"Address allowed to spend them."},"token":{"type":"string","description":"ERC20 contract address."},"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}},"required":["owner","spender","token"]},"example":{"owner":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","spender":"0x2626664c2603336E57B271c5C0b26F421741e481","token":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","chain":"base"}}}}},"get":{"operationId":"v1EvmErc20AllowanceGet","summary":"ERC20 allowance - How much of a token a spender is still allowed to move on an owner's behalf, and whether that approval is unlimited","description":"How much of a token a spender is still allowed to move on an owner's behalf, and whether that approval is unlimited. The check to run before an approve, and the one that finds forgotten infinite approvals. Via eth_call (allowance).","tags":["erc20 allowance","allowance","approve","spender","usdc","erc20","security","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"raw":{"type":"string"},"amount":{"type":"number"},"decimals":{"type":"number"},"unlimited":{"type":"boolean"}}},"example":{"raw":"0","amount":0,"decimals":6,"unlimited":false}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"owner","in":"query","required":true,"description":"Address that owns the tokens.","schema":{"type":"string"},"example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"},{"name":"spender","in":"query","required":true,"description":"Address allowed to spend them.","schema":{"type":"string"},"example":"0x2626664c2603336E57B271c5C0b26F421741e481"},{"name":"token","in":"query","required":true,"description":"ERC20 contract address.","schema":{"type":"string"},"example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"}]}},"/v1/evm/nft-owner":{"post":{"operationId":"v1EvmNftOwner","summary":"NFT owner and metadata - Who owns a given ERC721 token id, plus its tokenURI and collection name in the same call","description":"Who owns a given ERC721 token id, plus its tokenURI and collection name in the same call. Answers is this NFT still theirs without an indexer or an API key. Via eth_call (ownerOf).","tags":["nft owner","ownerof","erc721","tokenuri","nft","ownership","collection","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"owner":{"type":"string"},"tokenURI":{"type":"string"},"collection":{"type":"string"}}},"example":{"owner":"0x1a2b...","tokenURI":"ipfs://Qm...","collection":"Azuki"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contract":{"type":"string","description":"ERC721 contract address."},"tokenId":{"type":"string","description":"Token id, in decimal."},"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}},"required":["contract","tokenId"]},"example":{"contract":"0xED5AF388653567Af2F388E6224dC7C4b3241C544","tokenId":"1","chain":"ethereum"}}}}},"get":{"operationId":"v1EvmNftOwnerGet","summary":"NFT owner and metadata - Who owns a given ERC721 token id, plus its tokenURI and collection name in the same call","description":"Who owns a given ERC721 token id, plus its tokenURI and collection name in the same call. Answers is this NFT still theirs without an indexer or an API key. Via eth_call (ownerOf).","tags":["nft owner","ownerof","erc721","tokenuri","nft","ownership","collection","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"owner":{"type":"string"},"tokenURI":{"type":"string"},"collection":{"type":"string"}}},"example":{"owner":"0x1a2b...","tokenURI":"ipfs://Qm...","collection":"Azuki"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"contract","in":"query","required":true,"description":"ERC721 contract address.","schema":{"type":"string"},"example":"0xED5AF388653567Af2F388E6224dC7C4b3241C544"},{"name":"tokenId","in":"query","required":true,"description":"Token id, in decimal.","schema":{"type":"string"},"example":"1"},{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"ethereum"}]}},"/v1/evm/portfolio":{"post":{"operationId":"v1EvmPortfolio","summary":"Wallet token portfolio - Native balance plus the balance of every token you list, on one chain, in a single paid call - each with symbol and decimals already applied","description":"Native balance plus the balance of every token you list, on one chain, in a single paid call - each with symbol and decimals already applied. One request instead of one per token. Via eth_getBalance + eth_call.","tags":["wallet portfolio","portfolio","holdings","token balances","multi token","wallet","usdc","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"native":{"type":"object"},"tokens":{"type":"array","items":{"type":"object"}}}},"example":{"native":{"ether":3.12},"tokens":[{"symbol":"USDC","amount":41.44}]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"Wallet to inspect."},"tokens":{"type":"array","description":"Up to 20 ERC20 contract addresses."},"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}},"required":["address"]},"example":{"address":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","tokens":["0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"],"chain":"base"}}}}},"get":{"operationId":"v1EvmPortfolioGet","summary":"Wallet token portfolio - Native balance plus the balance of every token you list, on one chain, in a single paid call - each with symbol and decimals already applied","description":"Native balance plus the balance of every token you list, on one chain, in a single paid call - each with symbol and decimals already applied. One request instead of one per token. Via eth_getBalance + eth_call.","tags":["wallet portfolio","portfolio","holdings","token balances","multi token","wallet","usdc","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"native":{"type":"object"},"tokens":{"type":"array","items":{"type":"object"}}}},"example":{"native":{"ether":3.12},"tokens":[{"symbol":"USDC","amount":41.44}]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"address","in":"query","required":true,"description":"Wallet to inspect.","schema":{"type":"string"},"example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"},{"name":"tokens","in":"query","required":false,"description":"Up to 20 ERC20 contract addresses.","schema":{"type":"array"},"example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"}]}},"/v1/evm/fees":{"post":{"operationId":"v1EvmFees","summary":"EIP-1559 fee suggestion - Suggested maxFeePerGas and maxPriorityFeePerGas from the last 20 blocks of real fee history, at slow, normal and fast percentiles","description":"Suggested maxFeePerGas and maxPriorityFeePerGas from the last 20 blocks of real fee history, at slow, normal and fast percentiles. Beats guessing a gas price and getting stuck in the mempool. Via eth_feeHistory.","tags":["eip1559","priority fee","maxfeepergas","gas fees","gwei","gas","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"baseFeeWei":{"type":"string"},"normal":{"type":"object"}}},"example":{"baseFeeWei":"5000000","normal":{"maxFeePerGas":"16000000","maxPriorityFeePerGas":"1000000"}}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}}},"example":{"chain":"base"}}}}},"get":{"operationId":"v1EvmFeesGet","summary":"EIP-1559 fee suggestion - Suggested maxFeePerGas and maxPriorityFeePerGas from the last 20 blocks of real fee history, at slow, normal and fast percentiles","description":"Suggested maxFeePerGas and maxPriorityFeePerGas from the last 20 blocks of real fee history, at slow, normal and fast percentiles. Beats guessing a gas price and getting stuck in the mempool. Via eth_feeHistory.","tags":["eip1559","priority fee","maxfeepergas","gas fees","gwei","gas","evm","base","ethereum","polygon","arbitrum","optimism"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"baseFeeWei":{"type":"string"},"normal":{"type":"object"}}},"example":{"baseFeeWei":"5000000","normal":{"maxFeePerGas":"16000000","maxPriorityFeePerGas":"1000000"}}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"}]}},"/v1/evm/ens":{"post":{"operationId":"v1EvmEns","summary":"ENS name resolution - Resolves an ENS name to its address, or an address back to its primary ENS name, reading Ethereum mainnet directly","description":"Resolves an ENS name to its address, or an address back to its primary ENS name, reading Ethereum mainnet directly. Names are what humans paste and addresses are what chains need.","tags":["ens resolution","ens","eth name","reverse lookup","naming","ethereum","vitalik.eth"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"address":{"type":"string"},"found":{"type":"boolean"}}},"example":{"name":"vitalik.eth","address":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","found":true}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"ENS name to resolve, such as vitalik.eth."},"address":{"type":"string","description":"Address to reverse-resolve. Use instead of name."}}},"example":{"name":"vitalik.eth"}}}}},"get":{"operationId":"v1EvmEnsGet","summary":"ENS name resolution - Resolves an ENS name to its address, or an address back to its primary ENS name, reading Ethereum mainnet directly","description":"Resolves an ENS name to its address, or an address back to its primary ENS name, reading Ethereum mainnet directly. Names are what humans paste and addresses are what chains need.","tags":["ens resolution","ens","eth name","reverse lookup","naming","ethereum","vitalik.eth"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"address":{"type":"string"},"found":{"type":"boolean"}}},"example":{"name":"vitalik.eth","address":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","found":true}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"name","in":"query","required":false,"description":"ENS name to resolve, such as vitalik.eth.","schema":{"type":"string"},"example":"vitalik.eth"},{"name":"address","in":"query","required":false,"description":"Address to reverse-resolve. Use instead of name.","schema":{"type":"string"}}]}},"/v1/evm/token-safety":{"post":{"operationId":"v1EvmTokenSafety","summary":"ERC20 pre-trade safety check - Pre-trade risk check for any ERC20 on Base, Ethereum, Polygon, Arbitrum or Optimism, straight from the deployed bytecode and live state","description":"Pre-trade risk check for any ERC20 on Base, Ethereum, Polygon, Arbitrum or Optimism, straight from the deployed bytecode and live state. Detects mint, pause, blacklist, upgradeable proxy and mutable buy/sell tax powers, and reports whether ownership is renounced. Unlike LLM-written verdicts this returns the EVIDENCE - the exact selector found and its byte offset - so an agent can apply its own policy. Deterministic: same contract, same answer.","tags":["token safety","rug pull","honeypot","erc20","risk","pre-trade","contract audit","evm","base"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"chain":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"risk":{"type":"string"},"score":{"type":"number"},"isContract":{"type":"boolean"},"isERC20":{"type":"boolean"},"ownershipRenounced":{"type":"boolean"},"findings":{"type":"array","items":{"type":"object"}},"limitations":{"type":"array","items":{"type":"object"}}}},"example":{"token":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","chain":"eip155:8453","name":"USD Coin","symbol":"USDC","risk":"medium","score":6,"isContract":true,"isERC20":true,"ownershipRenounced":false,"findings":[{"power":"upgradeTo(address)","selector":"0x3659cfe6","offsetBytes":412,"weight":3,"means":"the whole implementation can be swapped: today's code is not a promise"}],"limitations":["Reads bytecode and state only: holder concentration and liquidity need an indexer and are NOT checked.","A four-byte selector can appear by chance; offsetBytes is given so you can verify it."]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"ERC20 contract address to check."},"chain":{"type":"string","description":"base | ethereum | polygon | arbitrum | optimism."}},"required":["token"]},"example":{"token":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","chain":"base"}}}}},"get":{"operationId":"v1EvmTokenSafetyGet","summary":"ERC20 pre-trade safety check - Pre-trade risk check for any ERC20 on Base, Ethereum, Polygon, Arbitrum or Optimism, straight from the deployed bytecode and live state","description":"Pre-trade risk check for any ERC20 on Base, Ethereum, Polygon, Arbitrum or Optimism, straight from the deployed bytecode and live state. Detects mint, pause, blacklist, upgradeable proxy and mutable buy/sell tax powers, and reports whether ownership is renounced. Unlike LLM-written verdicts this returns the EVIDENCE - the exact selector found and its byte offset - so an agent can apply its own policy. Deterministic: same contract, same answer.","tags":["token safety","rug pull","honeypot","erc20","risk","pre-trade","contract audit","evm","base"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"chain":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"risk":{"type":"string"},"score":{"type":"number"},"isContract":{"type":"boolean"},"isERC20":{"type":"boolean"},"ownershipRenounced":{"type":"boolean"},"findings":{"type":"array","items":{"type":"object"}},"limitations":{"type":"array","items":{"type":"object"}}}},"example":{"token":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","chain":"eip155:8453","name":"USD Coin","symbol":"USDC","risk":"medium","score":6,"isContract":true,"isERC20":true,"ownershipRenounced":false,"findings":[{"power":"upgradeTo(address)","selector":"0x3659cfe6","offsetBytes":412,"weight":3,"means":"the whole implementation can be swapped: today's code is not a promise"}],"limitations":["Reads bytecode and state only: holder concentration and liquidity need an indexer and are NOT checked.","A four-byte selector can appear by chance; offsetBytes is given so you can verify it."]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"token","in":"query","required":true,"description":"ERC20 contract address to check.","schema":{"type":"string"},"example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},{"name":"chain","in":"query","required":false,"description":"base | ethereum | polygon | arbitrum | optimism.","schema":{"type":"string"},"example":"base"}]}},"/v1/util/keccak256":{"post":{"operationId":"v1UtilKeccak256","summary":"Keccak-256 hash - Keccak-256 of any string or hex payload - the hash Ethereum actually uses, which is NOT the same as SHA3-256","description":"Keccak-256 of any string or hex payload - the hash Ethereum actually uses, which is NOT the same as SHA3-256. Needed for selectors, event topics, salts and CREATE2 addresses.","tags":["keccak256","keccak","hash","solidity","sha3","digest","crypto","ethereum"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"hash":{"type":"string"},"bytes":{"type":"number"}}},"example":{"hash":"0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8","bytes":5}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"input":{"type":"string","description":"Plain text, or a 0x-prefixed hex payload to hash as bytes."}},"required":["input"]},"example":{"input":"hello"}}}}},"get":{"operationId":"v1UtilKeccak256Get","summary":"Keccak-256 hash - Keccak-256 of any string or hex payload - the hash Ethereum actually uses, which is NOT the same as SHA3-256","description":"Keccak-256 of any string or hex payload - the hash Ethereum actually uses, which is NOT the same as SHA3-256. Needed for selectors, event topics, salts and CREATE2 addresses.","tags":["keccak256","keccak","hash","solidity","sha3","digest","crypto","ethereum"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"hash":{"type":"string"},"bytes":{"type":"number"}}},"example":{"hash":"0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8","bytes":5}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"input","in":"query","required":true,"description":"Plain text, or a 0x-prefixed hex payload to hash as bytes.","schema":{"type":"string"},"example":"hello"}]}},"/v1/util/sha256":{"post":{"operationId":"v1UtilSha256","summary":"SHA-256 hash - SHA-256 of any string or hex payload, returned as hex and as base64","description":"SHA-256 of any string or hex payload, returned as hex and as base64. The hash everything outside Ethereum uses: file digests, API signatures, content addressing.","tags":["sha256","hash","checksum","digest","integrity","crypto","base64"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"hex":{"type":"string"},"base64":{"type":"string"}}},"example":{"hex":"0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824","base64":"LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ="}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"input":{"type":"string","description":"Plain text, or a 0x-prefixed hex payload to hash as bytes."}},"required":["input"]},"example":{"input":"hello"}}}}},"get":{"operationId":"v1UtilSha256Get","summary":"SHA-256 hash - SHA-256 of any string or hex payload, returned as hex and as base64","description":"SHA-256 of any string or hex payload, returned as hex and as base64. The hash everything outside Ethereum uses: file digests, API signatures, content addressing.","tags":["sha256","hash","checksum","digest","integrity","crypto","base64"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"hex":{"type":"string"},"base64":{"type":"string"}}},"example":{"hex":"0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824","base64":"LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ="}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"input","in":"query","required":true,"description":"Plain text, or a 0x-prefixed hex payload to hash as bytes.","schema":{"type":"string"},"example":"hello"}]}},"/v1/util/address":{"post":{"operationId":"v1UtilAddress","summary":"Address checksum and validation - Validates an EVM address and returns it in EIP-55 mixed-case checksum form","description":"Validates an EVM address and returns it in EIP-55 mixed-case checksum form. Catches typos before you send funds: an address that fails the checksum is almost always mistyped.","tags":["address checksum","eip55","address validation","checksum","evm address","safety","0x address"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"valid":{"type":"boolean"},"checksum":{"type":"string"},"wasChecksummed":{"type":"boolean"}}},"example":{"valid":true,"checksum":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","wasChecksummed":false}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"The address to validate, in any case."}},"required":["address"]},"example":{"address":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045"}}}}},"get":{"operationId":"v1UtilAddressGet","summary":"Address checksum and validation - Validates an EVM address and returns it in EIP-55 mixed-case checksum form","description":"Validates an EVM address and returns it in EIP-55 mixed-case checksum form. Catches typos before you send funds: an address that fails the checksum is almost always mistyped.","tags":["address checksum","eip55","address validation","checksum","evm address","safety","0x address"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"valid":{"type":"boolean"},"checksum":{"type":"string"},"wasChecksummed":{"type":"boolean"}}},"example":{"valid":true,"checksum":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","wasChecksummed":false}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"address","in":"query","required":true,"description":"The address to validate, in any case.","schema":{"type":"string"},"example":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045"}]}},"/v1/util/units":{"post":{"operationId":"v1UtilUnits","summary":"Token unit converter - Converts between wei, gwei, ether and any token decimals using exact integer maths - no floating point, no silent rounding","description":"Converts between wei, gwei, ether and any token decimals using exact integer maths - no floating point, no silent rounding. The mistake that costs real money is being off by a thousand on decimals.","tags":["wei to ether","wei","gwei","unit conversion","format units","ether","decimals","evm"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"result":{"type":"string"}}},"example":{"amount":"1500000000000000000","from":"wei","to":"ether","result":"1.5"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"string","description":"The quantity, as a string to avoid float loss."},"from":{"type":"string","description":"wei | gwei | ether, or a number of decimals."},"to":{"type":"string","description":"wei | gwei | ether, or a number of decimals."}},"required":["amount","from","to"]},"example":{"amount":"1500000000000000000","from":"wei","to":"ether"}}}}},"get":{"operationId":"v1UtilUnitsGet","summary":"Token unit converter - Converts between wei, gwei, ether and any token decimals using exact integer maths - no floating point, no silent rounding","description":"Converts between wei, gwei, ether and any token decimals using exact integer maths - no floating point, no silent rounding. The mistake that costs real money is being off by a thousand on decimals.","tags":["wei to ether","wei","gwei","unit conversion","format units","ether","decimals","evm"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"result":{"type":"string"}}},"example":{"amount":"1500000000000000000","from":"wei","to":"ether","result":"1.5"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"amount","in":"query","required":true,"description":"The quantity, as a string to avoid float loss.","schema":{"type":"string"},"example":"1500000000000000000"},{"name":"from","in":"query","required":true,"description":"wei | gwei | ether, or a number of decimals.","schema":{"type":"string"},"example":"wei"},{"name":"to","in":"query","required":true,"description":"wei | gwei | ether, or a number of decimals.","schema":{"type":"string"},"example":"ether"}]}},"/v1/util/hex":{"post":{"operationId":"v1UtilHex","summary":"Hex converter - Converts between hex, decimal and UTF-8 text in one call, with big integers handled exactly","description":"Converts between hex, decimal and UTF-8 text in one call, with big integers handled exactly. For reading raw RPC output, which comes back as hex and overflows a JavaScript number.","tags":["hex encoding","hex to decimal","hex","decimal","parse hex","bigint","conversion"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"hex":{"type":"string"},"decimal":{"type":"string"},"bytes":{"type":"number"}}},"example":{"hex":"0x1a2b3c","decimal":"1715004","bytes":3}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"string","description":"A 0x-prefixed hex string, a decimal number, or text."},"as":{"type":"string","description":"hex | decimal | text. What the value IS. Defaults to autodetect."}},"required":["value"]},"example":{"value":"0x1a2b3c"}}}}},"get":{"operationId":"v1UtilHexGet","summary":"Hex converter - Converts between hex, decimal and UTF-8 text in one call, with big integers handled exactly","description":"Converts between hex, decimal and UTF-8 text in one call, with big integers handled exactly. For reading raw RPC output, which comes back as hex and overflows a JavaScript number.","tags":["hex encoding","hex to decimal","hex","decimal","parse hex","bigint","conversion"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"hex":{"type":"string"},"decimal":{"type":"string"},"bytes":{"type":"number"}}},"example":{"hex":"0x1a2b3c","decimal":"1715004","bytes":3}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"value","in":"query","required":true,"description":"A 0x-prefixed hex string, a decimal number, or text.","schema":{"type":"string"},"example":"0x1a2b3c"},{"name":"as","in":"query","required":false,"description":"hex | decimal | text. What the value IS. Defaults to autodetect.","schema":{"type":"string"}}]}},"/v1/util/base64":{"post":{"operationId":"v1UtilBase64","summary":"Base64 encode and decode - Base64 in both directions, including the URL-safe alphabet, with UTF-8 handled properly","description":"Base64 in both directions, including the URL-safe alphabet, with UTF-8 handled properly. Encoding is what carries payloads through headers and JSON, and x402 itself rides on it.","tags":["base64","base64 decode","base64 encode","url safe","encoding","atob","btoa","text"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string"},"result":{"type":"string"}}},"example":{"mode":"encode","result":"aGVsbG8gd29ybGQ="}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"input":{"type":"string","description":"The text or base64 to convert."},"mode":{"type":"string","description":"encode | decode. Defaults to encode."},"urlSafe":{"type":"boolean","description":"Use the URL-safe alphabet (-_ instead of +/)."}},"required":["input"]},"example":{"input":"hello world","mode":"encode"}}}}},"get":{"operationId":"v1UtilBase64Get","summary":"Base64 encode and decode - Base64 in both directions, including the URL-safe alphabet, with UTF-8 handled properly","description":"Base64 in both directions, including the URL-safe alphabet, with UTF-8 handled properly. Encoding is what carries payloads through headers and JSON, and x402 itself rides on it.","tags":["base64","base64 decode","base64 encode","url safe","encoding","atob","btoa","text"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string"},"result":{"type":"string"}}},"example":{"mode":"encode","result":"aGVsbG8gd29ybGQ="}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"input","in":"query","required":true,"description":"The text or base64 to convert.","schema":{"type":"string"},"example":"hello world"},{"name":"mode","in":"query","required":false,"description":"encode | decode. Defaults to encode.","schema":{"type":"string"},"example":"encode"},{"name":"urlSafe","in":"query","required":false,"description":"Use the URL-safe alphabet (-_ instead of +/).","schema":{"type":"boolean"}}]}},"/v1/util/uuid":{"post":{"operationId":"v1UtilUuid","summary":"UUID v4 generator - Cryptographically random UUID v4s, up to 100 per call, straight from the platform CSPRNG","description":"Cryptographically random UUID v4s, up to 100 per call, straight from the platform CSPRNG. For idempotency keys, request ids and correlation ids - the ones that must not collide.","tags":["uuid","uuid v4","guid","request id","idempotency","random","identifier"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"},"uuids":{"type":"array","items":{"type":"object"}}}},"example":{"count":1,"uuids":["3f2b0c9a-1d4e-4f6b-8c2d-9a7e5b1f0c34"]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number","description":"How many to generate, 1-100. Defaults to 1."}}},"example":{"count":3}}}}},"get":{"operationId":"v1UtilUuidGet","summary":"UUID v4 generator - Cryptographically random UUID v4s, up to 100 per call, straight from the platform CSPRNG","description":"Cryptographically random UUID v4s, up to 100 per call, straight from the platform CSPRNG. For idempotency keys, request ids and correlation ids - the ones that must not collide.","tags":["uuid","uuid v4","guid","request id","idempotency","random","identifier"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"},"uuids":{"type":"array","items":{"type":"object"}}}},"example":{"count":1,"uuids":["3f2b0c9a-1d4e-4f6b-8c2d-9a7e5b1f0c34"]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"count","in":"query","required":false,"description":"How many to generate, 1-100. Defaults to 1.","schema":{"type":"number"},"example":"3"}]}},"/v1/util/verify-signature":{"post":{"operationId":"v1UtilVerifySignature","summary":"Verify wallet signature - Recovers the address that signed a personal_sign (EIP-191) message and tells you whether it matches the address you expected","description":"Recovers the address that signed a personal_sign (EIP-191) message and tells you whether it matches the address you expected. This is how you prove a wallet is controlled by whoever is talking to you.","tags":["verify signature","ecrecover","eip191","personal_sign","siwe","signature","auth","wallet"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"signer":{"type":"string"},"matches":{"type":"boolean"}}},"example":{"signer":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","matches":true}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"The exact message that was signed."},"signature":{"type":"string","description":"65-byte 0x signature from personal_sign."},"expected":{"type":"string","description":"Optional address to compare the recovered signer against."}},"required":["message","signature"]},"example":{"message":"hello","signature":"0x6b6789de154ae28f9182d3879f509c1124d6ae9c3617312e7f38eed8944eabfe275e8112c19eb9026686e6826dca4b32daeb409d0836f3767ea50ea5ea2044291b","expected":"0x27295608671E37654daD42A3E366290897A9861b"}}}}},"get":{"operationId":"v1UtilVerifySignatureGet","summary":"Verify wallet signature - Recovers the address that signed a personal_sign (EIP-191) message and tells you whether it matches the address you expected","description":"Recovers the address that signed a personal_sign (EIP-191) message and tells you whether it matches the address you expected. This is how you prove a wallet is controlled by whoever is talking to you.","tags":["verify signature","ecrecover","eip191","personal_sign","siwe","signature","auth","wallet"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"signer":{"type":"string"},"matches":{"type":"boolean"}}},"example":{"signer":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","matches":true}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"message","in":"query","required":true,"description":"The exact message that was signed.","schema":{"type":"string"},"example":"hello"},{"name":"signature","in":"query","required":true,"description":"65-byte 0x signature from personal_sign.","schema":{"type":"string"},"example":"0x6b6789de154ae28f9182d3879f509c1124d6ae9c3617312e7f38eed8944eabfe275e8112c19eb9026686e6826dca4b32daeb409d0836f3767ea50ea5ea2044291b"},{"name":"expected","in":"query","required":false,"description":"Optional address to compare the recovered signer against.","schema":{"type":"string"},"example":"0x27295608671E37654daD42A3E366290897A9861b"}]}},"/v1/util/selector":{"post":{"operationId":"v1UtilSelector","summary":"Function selector and event topic - Turns a Solidity signature like transfer(address,uint256) into its 4-byte function selector and its 32-byte event topic0","description":"Turns a Solidity signature like transfer(address,uint256) into its 4-byte function selector and its 32-byte event topic0. What you need to build calldata by hand or to filter logs.","tags":["function selector","4byte","topic0","function signature","abi","selector","calldata","solidity"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"selector":{"type":"string"},"topic0":{"type":"string"}}},"example":{"selector":"0xa9059cbb","topic0":"0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"signature":{"type":"string","description":"Canonical signature: name(type1,type2), no spaces and no argument names."}},"required":["signature"]},"example":{"signature":"transfer(address,uint256)"}}}}},"get":{"operationId":"v1UtilSelectorGet","summary":"Function selector and event topic - Turns a Solidity signature like transfer(address,uint256) into its 4-byte function selector and its 32-byte event topic0","description":"Turns a Solidity signature like transfer(address,uint256) into its 4-byte function selector and its 32-byte event topic0. What you need to build calldata by hand or to filter logs.","tags":["function selector","4byte","topic0","function signature","abi","selector","calldata","solidity"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"selector":{"type":"string"},"topic0":{"type":"string"}}},"example":{"selector":"0xa9059cbb","topic0":"0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"signature","in":"query","required":true,"description":"Canonical signature: name(type1,type2), no spaces and no argument names.","schema":{"type":"string"},"example":"transfer(address,uint256)"}]}},"/v1/random/dice":{"post":{"operationId":"v1RandomDice","summary":"Dice roller - Roll dice with any number of faces and get every roll plus the total","description":"Roll dice with any number of faces and get every roll plus the total. Uses the platform CSPRNG with rejection sampling, so every face is equally likely - a plain modulo is biased. Standard dice notation: 3d6, 1d20.","tags":["dice","roll dice","d20","random","tabletop"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"faces":{"type":"number"},"count":{"type":"number"},"rolls":{"type":"array","items":{"type":"object"}},"total":{"type":"number"},"notation":{"type":"string"}}},"example":{"faces":6,"count":2,"rolls":[4,2],"total":6,"notation":"2d6"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"faces":{"type":"number","description":"Faces per die, 2-1000000. Defaults to 6."},"count":{"type":"number","description":"How many dice to roll, 1-100. Defaults to 1."}}},"example":{"faces":6,"count":2}}}}},"get":{"operationId":"v1RandomDiceGet","summary":"Dice roller - Roll dice with any number of faces and get every roll plus the total","description":"Roll dice with any number of faces and get every roll plus the total. Uses the platform CSPRNG with rejection sampling, so every face is equally likely - a plain modulo is biased. Standard dice notation: 3d6, 1d20.","tags":["dice","roll dice","d20","random","tabletop"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"faces":{"type":"number"},"count":{"type":"number"},"rolls":{"type":"array","items":{"type":"object"}},"total":{"type":"number"},"notation":{"type":"string"}}},"example":{"faces":6,"count":2,"rolls":[4,2],"total":6,"notation":"2d6"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"faces","in":"query","required":false,"description":"Faces per die, 2-1000000. Defaults to 6.","schema":{"type":"number"},"example":"6"},{"name":"count","in":"query","required":false,"description":"How many dice to roll, 1-100. Defaults to 1.","schema":{"type":"number"},"example":"2"}]}},"/v1/random/coinflip":{"post":{"operationId":"v1RandomCoinflip","summary":"Coin flip - Flip one or more fair coins and get heads or tails, with the tally","description":"Flip one or more fair coins and get heads or tails, with the tally. Cryptographically random, not Math.random. For tie-breaks and A/B splits an agent has to decide on its own.","tags":["coin flip","flip a coin","heads or tails","random","coin toss"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"},"flips":{"type":"array","items":{"type":"object"}},"heads":{"type":"number"},"tails":{"type":"number"}}},"example":{"count":1,"flips":["heads"],"heads":1,"tails":0}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number","description":"How many coins to flip, 1-100. Defaults to 1."}}},"example":{"count":1}}}}},"get":{"operationId":"v1RandomCoinflipGet","summary":"Coin flip - Flip one or more fair coins and get heads or tails, with the tally","description":"Flip one or more fair coins and get heads or tails, with the tally. Cryptographically random, not Math.random. For tie-breaks and A/B splits an agent has to decide on its own.","tags":["coin flip","flip a coin","heads or tails","random","coin toss"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"},"flips":{"type":"array","items":{"type":"object"}},"heads":{"type":"number"},"tails":{"type":"number"}}},"example":{"count":1,"flips":["heads"],"heads":1,"tails":0}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"count","in":"query","required":false,"description":"How many coins to flip, 1-100. Defaults to 1.","schema":{"type":"number"},"example":"1"}]}},"/v1/random/pick":{"post":{"operationId":"v1RandomPick","summary":"Random pick - Pick one or more items at random from a list you send, with or without repeats","description":"Pick one or more items at random from a list you send, with or without repeats. The list is yours, so this is the unbiased chooser an agent needs when it has options and no reason to prefer any.","tags":["random pick","choose","random choice","sample","lottery"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"number"},"count":{"type":"number"},"picked":{"type":"array","items":{"type":"object"}}}},"example":{"items":3,"count":1,"picked":["green"]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"string","description":"The options, comma-separated. A JSON array of strings is also accepted in a POST body."},"count":{"type":"number","description":"How many to pick, 1-100. Defaults to 1."},"repeat":{"type":"boolean","description":"Allow the same item more than once. Defaults to false."}},"required":["items"]},"example":{"items":"red,green,blue","count":1}}}}},"get":{"operationId":"v1RandomPickGet","summary":"Random pick - Pick one or more items at random from a list you send, with or without repeats","description":"Pick one or more items at random from a list you send, with or without repeats. The list is yours, so this is the unbiased chooser an agent needs when it has options and no reason to prefer any.","tags":["random pick","choose","random choice","sample","lottery"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"number"},"count":{"type":"number"},"picked":{"type":"array","items":{"type":"object"}}}},"example":{"items":3,"count":1,"picked":["green"]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"items","in":"query","required":true,"description":"The options, comma-separated. A JSON array of strings is also accepted in a POST body.","schema":{"type":"string"},"example":"red,green,blue"},{"name":"count","in":"query","required":false,"description":"How many to pick, 1-100. Defaults to 1.","schema":{"type":"number"},"example":"1"},{"name":"repeat","in":"query","required":false,"description":"Allow the same item more than once. Defaults to false.","schema":{"type":"boolean"}}]}},"/v1/random/shuffle":{"post":{"operationId":"v1RandomShuffle","summary":"Shuffle a list - Shuffle a list into a uniformly random order with Fisher-Yates over the platform CSPRNG","description":"Shuffle a list into a uniformly random order with Fisher-Yates over the platform CSPRNG. Every permutation is equally likely, which sorting by a random key does not give you.","tags":["shuffle","randomize order","fisher-yates","permutation","random"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"},"shuffled":{"type":"array","items":{"type":"object"}}}},"example":{"count":5,"shuffled":["c","a","e","b","d"]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"string","description":"The list to shuffle, comma-separated. A JSON array of strings is also accepted in a POST body."}},"required":["items"]},"example":{"items":"a,b,c,d,e"}}}}},"get":{"operationId":"v1RandomShuffleGet","summary":"Shuffle a list - Shuffle a list into a uniformly random order with Fisher-Yates over the platform CSPRNG","description":"Shuffle a list into a uniformly random order with Fisher-Yates over the platform CSPRNG. Every permutation is equally likely, which sorting by a random key does not give you.","tags":["shuffle","randomize order","fisher-yates","permutation","random"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"},"shuffled":{"type":"array","items":{"type":"object"}}}},"example":{"count":5,"shuffled":["c","a","e","b","d"]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"items","in":"query","required":true,"description":"The list to shuffle, comma-separated. A JSON array of strings is also accepted in a POST body.","schema":{"type":"string"},"example":"a,b,c,d,e"}]}},"/v1/random/password":{"post":{"operationId":"v1RandomPassword","summary":"Password generator - Generate strong random secrets from the platform CSPRNG, with the entropy in bits so you can judge them","description":"Generate strong random secrets from the platform CSPRNG, with the entropy in bits so you can judge them. Four alphabets, including one with no look-alike characters for anything a human has to read back.","tags":["password generator","random password","secret","token","entropy"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"length":{"type":"number"},"alphabet":{"type":"string"},"bitsOfEntropy":{"type":"number"},"passwords":{"type":"array","items":{"type":"object"}}}},"example":{"length":20,"alphabet":"legible","bitsOfEntropy":116,"passwords":["hK4mRq7tVbn2xYzP9cWd"]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"length":{"type":"number","description":"Characters per secret, 8-256. Defaults to 20."},"alphabet":{"type":"string","description":"alnum | legible | hex | completo. Defaults to legible."},"count":{"type":"number","description":"How many to generate, 1-50. Defaults to 1."}}},"example":{"length":20,"alphabet":"legible","count":1}}}}},"get":{"operationId":"v1RandomPasswordGet","summary":"Password generator - Generate strong random secrets from the platform CSPRNG, with the entropy in bits so you can judge them","description":"Generate strong random secrets from the platform CSPRNG, with the entropy in bits so you can judge them. Four alphabets, including one with no look-alike characters for anything a human has to read back.","tags":["password generator","random password","secret","token","entropy"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"length":{"type":"number"},"alphabet":{"type":"string"},"bitsOfEntropy":{"type":"number"},"passwords":{"type":"array","items":{"type":"object"}}}},"example":{"length":20,"alphabet":"legible","bitsOfEntropy":116,"passwords":["hK4mRq7tVbn2xYzP9cWd"]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"length","in":"query","required":false,"description":"Characters per secret, 8-256. Defaults to 20.","schema":{"type":"number"},"example":"20"},{"name":"alphabet","in":"query","required":false,"description":"alnum | legible | hex | completo. Defaults to legible.","schema":{"type":"string"},"example":"legible"},{"name":"count","in":"query","required":false,"description":"How many to generate, 1-50. Defaults to 1.","schema":{"type":"number"},"example":"1"}]}},"/v1/random/number":{"post":{"operationId":"v1RandomNumber","summary":"Random number - Uniform random integers in any range you give, with or without repeats","description":"Uniform random integers in any range you give, with or without repeats. Rejection sampling, so the ends of the range are not slightly less likely - which is what happens with modulo.","tags":["random number","random integer","rng","range","uniform"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"},"count":{"type":"number"},"numbers":{"type":"array","items":{"type":"object"}}}},"example":{"min":1,"max":100,"count":1,"numbers":[42]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"min":{"type":"number","description":"Lowest value, inclusive. Defaults to 1."},"max":{"type":"number","description":"Highest value, inclusive. Defaults to 100."},"count":{"type":"number","description":"How many to draw, 1-100. Defaults to 1."},"unique":{"type":"boolean","description":"No repeats. Needs a range at least as wide as count."}}},"example":{"min":1,"max":100,"count":1}}}}},"get":{"operationId":"v1RandomNumberGet","summary":"Random number - Uniform random integers in any range you give, with or without repeats","description":"Uniform random integers in any range you give, with or without repeats. Rejection sampling, so the ends of the range are not slightly less likely - which is what happens with modulo.","tags":["random number","random integer","rng","range","uniform"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"},"count":{"type":"number"},"numbers":{"type":"array","items":{"type":"object"}}}},"example":{"min":1,"max":100,"count":1,"numbers":[42]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"min","in":"query","required":false,"description":"Lowest value, inclusive. Defaults to 1.","schema":{"type":"number"},"example":"1"},{"name":"max","in":"query","required":false,"description":"Highest value, inclusive. Defaults to 100.","schema":{"type":"number"},"example":"100"},{"name":"count","in":"query","required":false,"description":"How many to draw, 1-100. Defaults to 1.","schema":{"type":"number"},"example":"1"},{"name":"unique","in":"query","required":false,"description":"No repeats. Needs a range at least as wide as count.","schema":{"type":"boolean"}}]}},"/v1/time/convert":{"post":{"operationId":"v1TimeConvert","summary":"Time zone converter - Convert a time between any two IANA time zones, with daylight saving applied from the runtime's own tz database","description":"Convert a time between any two IANA time zones, with daylight saving applied from the runtime's own tz database. Returns both sides with their UTC offset, abbreviation and DST flag, plus the UTC instant and the difference in hours. Warns when the time you asked for does not exist or happens twice because the clocks change that day: the two cases that quietly make a hand-made conversion wrong.","tags":["timezone converter","convert time","time zone","daylight saving","utc offset"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"instantUtc":{"type":"string"},"from":{"type":"object"},"to":{"type":"object"},"differenceHours":{"type":"number"}}},"example":{"instantUtc":"2026-09-10T12:30:00.000Z","from":{"timeZone":"Europe/Madrid","time":"14:30:00","utcOffset":"+02:00","isDST":true},"to":{"timeZone":"Asia/Tokyo","time":"21:30:00","utcOffset":"+09:00","isDST":false},"differenceHours":7}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"time":{"type":"string","description":"Wall clock as YYYY-MM-DD HH:MM in the \"from\" zone, or an ISO string with Z or an offset, or a unix timestamp, or \"now\". Defaults to now."},"from":{"type":"string","description":"Source IANA time zone, e.g. \"Europe/Madrid\". Required."},"to":{"type":"string","description":"Target IANA time zone, e.g. \"Asia/Tokyo\". Required."}},"required":["from","to"]},"example":{"time":"2026-09-10 14:30","from":"Europe/Madrid","to":"Asia/Tokyo"}}}}},"get":{"operationId":"v1TimeConvertGet","summary":"Time zone converter - Convert a time between any two IANA time zones, with daylight saving applied from the runtime's own tz database","description":"Convert a time between any two IANA time zones, with daylight saving applied from the runtime's own tz database. Returns both sides with their UTC offset, abbreviation and DST flag, plus the UTC instant and the difference in hours. Warns when the time you asked for does not exist or happens twice because the clocks change that day: the two cases that quietly make a hand-made conversion wrong.","tags":["timezone converter","convert time","time zone","daylight saving","utc offset"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"instantUtc":{"type":"string"},"from":{"type":"object"},"to":{"type":"object"},"differenceHours":{"type":"number"}}},"example":{"instantUtc":"2026-09-10T12:30:00.000Z","from":{"timeZone":"Europe/Madrid","time":"14:30:00","utcOffset":"+02:00","isDST":true},"to":{"timeZone":"Asia/Tokyo","time":"21:30:00","utcOffset":"+09:00","isDST":false},"differenceHours":7}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"time","in":"query","required":false,"description":"Wall clock as YYYY-MM-DD HH:MM in the \"from\" zone, or an ISO string with Z or an offset, or a unix timestamp, or \"now\". Defaults to now.","schema":{"type":"string"},"example":"2026-09-10 14:30"},{"name":"from","in":"query","required":true,"description":"Source IANA time zone, e.g. \"Europe/Madrid\". Required.","schema":{"type":"string"},"example":"Europe/Madrid"},{"name":"to","in":"query","required":true,"description":"Target IANA time zone, e.g. \"Asia/Tokyo\". Required.","schema":{"type":"string"},"example":"Asia/Tokyo"}]}},"/v1/time/now":{"post":{"operationId":"v1TimeNow","summary":"Current time in a time zone - The current time in any IANA time zone, in every form an agent needs at once: ISO with offset, 24-hour, 12-hour, weekday, unix timestamp and UTC","description":"The current time in any IANA time zone, in every form an agent needs at once: ISO with offset, 24-hour, 12-hour, weekday, unix timestamp and UTC. It also says whether daylight saving is active right now and what the zone's standard offset is, so a shifted clock can be told apart from a permanent one.","tags":["current time","what time is it","time zone","local time","utc"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"timeZone":{"type":"string"},"iso":{"type":"string"},"time":{"type":"string"},"weekday":{"type":"string"},"utcOffset":{"type":"string"},"isDST":{"type":"boolean"},"unix":{"type":"number"}}},"example":{"timeZone":"Asia/Tokyo","iso":"2026-09-10T21:30:00+09:00","time":"21:30:00","weekday":"Thursday","utcOffset":"+09:00","isDST":false,"unix":1789043400}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"zone":{"type":"string","description":"IANA time zone, e.g. \"Asia/Tokyo\" or \"UTC\". Required."}},"required":["zone"]},"example":{"zone":"Asia/Tokyo"}}}}},"get":{"operationId":"v1TimeNowGet","summary":"Current time in a time zone - The current time in any IANA time zone, in every form an agent needs at once: ISO with offset, 24-hour, 12-hour, weekday, unix timestamp and UTC","description":"The current time in any IANA time zone, in every form an agent needs at once: ISO with offset, 24-hour, 12-hour, weekday, unix timestamp and UTC. It also says whether daylight saving is active right now and what the zone's standard offset is, so a shifted clock can be told apart from a permanent one.","tags":["current time","what time is it","time zone","local time","utc"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"timeZone":{"type":"string"},"iso":{"type":"string"},"time":{"type":"string"},"weekday":{"type":"string"},"utcOffset":{"type":"string"},"isDST":{"type":"boolean"},"unix":{"type":"number"}}},"example":{"timeZone":"Asia/Tokyo","iso":"2026-09-10T21:30:00+09:00","time":"21:30:00","weekday":"Thursday","utcOffset":"+09:00","isDST":false,"unix":1789043400}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"zone","in":"query","required":true,"description":"IANA time zone, e.g. \"Asia/Tokyo\" or \"UTC\". Required.","schema":{"type":"string"},"example":"Asia/Tokyo"}]}},"/v1/time/zones":{"post":{"operationId":"v1TimeZones","summary":"Time zone directory - Search the full IANA time zone list and get each zone's current UTC offset, abbreviation, local time and DST state","description":"Search the full IANA time zone list and get each zone's current UTC offset, abbreviation, local time and DST state. Use it to turn a city or a country into the exact zone name the other endpoints expect, or to find every zone sitting at a given offset right now.","tags":["timezone list","iana time zones","time zone search","utc offset","daylight saving"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number"},"matched":{"type":"number"},"zones":{"type":"array","items":{"type":"object"}}}},"example":{"total":418,"matched":1,"zones":[{"timeZone":"Asia/Tokyo","utcOffset":"+09:00","abbreviation":"GMT+9","localTime":"21:30:00","isDST":false}]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"search":{"type":"string","description":"Substring matched against the zone name, case-insensitive. Omit to list them all."},"offset":{"type":"string","description":"Keep only zones at this current UTC offset, e.g. \"+09:00\" or \"-5\"."},"limit":{"type":"number","description":"Maximum zones returned, 1-500. Defaults to 50."}}},"example":{"search":"tokyo"}}}}},"get":{"operationId":"v1TimeZonesGet","summary":"Time zone directory - Search the full IANA time zone list and get each zone's current UTC offset, abbreviation, local time and DST state","description":"Search the full IANA time zone list and get each zone's current UTC offset, abbreviation, local time and DST state. Use it to turn a city or a country into the exact zone name the other endpoints expect, or to find every zone sitting at a given offset right now.","tags":["timezone list","iana time zones","time zone search","utc offset","daylight saving"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number"},"matched":{"type":"number"},"zones":{"type":"array","items":{"type":"object"}}}},"example":{"total":418,"matched":1,"zones":[{"timeZone":"Asia/Tokyo","utcOffset":"+09:00","abbreviation":"GMT+9","localTime":"21:30:00","isDST":false}]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"search","in":"query","required":false,"description":"Substring matched against the zone name, case-insensitive. Omit to list them all.","schema":{"type":"string"},"example":"tokyo"},{"name":"offset","in":"query","required":false,"description":"Keep only zones at this current UTC offset, e.g. \"+09:00\" or \"-5\".","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum zones returned, 1-500. Defaults to 50.","schema":{"type":"number"}}]}},"/v1/content/horror-story":{"post":{"operationId":"v1ContentHorrorStory","summary":"Two-sentence horror story - One two-sentence horror story, in English or Spanish, by theme: domestic, technological, cosmic or folk","description":"One two-sentence horror story, in English or Spanish, by theme: domestic, technological, cosmic or folk. Returned SPLIT into setup and payoff as well as joined, so a narrating agent can deliver the first line, pause, and then land the second. Takes parameters, returns an id to avoid repeats, and accepts a seed for a reproducible answer.","tags":["horror story","scary story","two sentence horror","creepy","fiction"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"language":{"type":"string"},"theme":{"type":"string"},"setup":{"type":"string"},"payoff":{"type":"string"},"story":{"type":"string"},"total":{"type":"number"}}},"example":{"id":"h4","language":"en","theme":"technological","setup":"The backup restored perfectly, every file exactly as I left it.","payoff":"Including the ones I wrote after the machine was destroyed.","story":"The backup restored perfectly, every file exactly as I left it. Including the ones I wrote after the machine was destroyed.","total":3}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"theme":{"type":"string","description":"domestic | technological | cosmic | folk. Omit for any."},"language":{"type":"string","description":"en | es. Defaults to en."},"seed":{"type":"string","description":"Same seed always returns the same story."},"exclude":{"type":"array","description":"Ids already seen, comma-separated in a GET."}}},"example":{"theme":"technological","language":"en"}}}}},"get":{"operationId":"v1ContentHorrorStoryGet","summary":"Two-sentence horror story - One two-sentence horror story, in English or Spanish, by theme: domestic, technological, cosmic or folk","description":"One two-sentence horror story, in English or Spanish, by theme: domestic, technological, cosmic or folk. Returned SPLIT into setup and payoff as well as joined, so a narrating agent can deliver the first line, pause, and then land the second. Takes parameters, returns an id to avoid repeats, and accepts a seed for a reproducible answer.","tags":["horror story","scary story","two sentence horror","creepy","fiction"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"language":{"type":"string"},"theme":{"type":"string"},"setup":{"type":"string"},"payoff":{"type":"string"},"story":{"type":"string"},"total":{"type":"number"}}},"example":{"id":"h4","language":"en","theme":"technological","setup":"The backup restored perfectly, every file exactly as I left it.","payoff":"Including the ones I wrote after the machine was destroyed.","story":"The backup restored perfectly, every file exactly as I left it. Including the ones I wrote after the machine was destroyed.","total":3}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"theme","in":"query","required":false,"description":"domestic | technological | cosmic | folk. Omit for any.","schema":{"type":"string"},"example":"technological"},{"name":"language","in":"query","required":false,"description":"en | es. Defaults to en.","schema":{"type":"string"},"example":"en"},{"name":"seed","in":"query","required":false,"description":"Same seed always returns the same story.","schema":{"type":"string"}},{"name":"exclude","in":"query","required":false,"description":"Ids already seen, comma-separated in a GET.","schema":{"type":"array"}}]}},"/v1/content/roast":{"post":{"operationId":"v1ContentRoast","summary":"Developer roast, on a target you pick - One lighthearted developer roast aimed at a target YOU choose - javascript, python, css, git, regex, kubernetes, agile or legacy code - and at the severity you ask for","description":"One lighthearted developer roast aimed at a target YOU choose - javascript, python, css, git, regex, kubernetes, agile or legacy code - and at the severity you ask for. Every other roast endpoint returns something generic; this one lets a code-review agent roast the actual stack in front of it. Bilingual, seedable and repeat-free.","tags":["roast","developer roast","programming humour","code review","insult"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"language":{"type":"string"},"target":{"type":"string"},"severity":{"type":"string"},"roast":{"type":"string"},"targets":{"type":"array","items":{"type":"object"}},"total":{"type":"number"}}},"example":{"id":"b8","language":"en","target":"kubernetes","severity":"savage","roast":"Six thousand lines of YAML, three control planes and a service mesh, to serve a form that emails a PDF.","targets":["javascript","python","css","git","regex","kubernetes","agile","legacy"],"total":1}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"target":{"type":"string","description":"javascript | python | css | git | regex | kubernetes | agile | legacy. Omit for any."},"severity":{"type":"string","description":"mild | medium | savage. Omit for any."},"language":{"type":"string","description":"en | es. Defaults to en."},"seed":{"type":"string","description":"Same seed always returns the same roast."},"exclude":{"type":"array","description":"Ids already seen, comma-separated in a GET."}}},"example":{"target":"kubernetes","language":"en"}}}}},"get":{"operationId":"v1ContentRoastGet","summary":"Developer roast, on a target you pick - One lighthearted developer roast aimed at a target YOU choose - javascript, python, css, git, regex, kubernetes, agile or legacy code - and at the severity you ask for","description":"One lighthearted developer roast aimed at a target YOU choose - javascript, python, css, git, regex, kubernetes, agile or legacy code - and at the severity you ask for. Every other roast endpoint returns something generic; this one lets a code-review agent roast the actual stack in front of it. Bilingual, seedable and repeat-free.","tags":["roast","developer roast","programming humour","code review","insult"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"language":{"type":"string"},"target":{"type":"string"},"severity":{"type":"string"},"roast":{"type":"string"},"targets":{"type":"array","items":{"type":"object"}},"total":{"type":"number"}}},"example":{"id":"b8","language":"en","target":"kubernetes","severity":"savage","roast":"Six thousand lines of YAML, three control planes and a service mesh, to serve a form that emails a PDF.","targets":["javascript","python","css","git","regex","kubernetes","agile","legacy"],"total":1}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"target","in":"query","required":false,"description":"javascript | python | css | git | regex | kubernetes | agile | legacy. Omit for any.","schema":{"type":"string"},"example":"kubernetes"},{"name":"severity","in":"query","required":false,"description":"mild | medium | savage. Omit for any.","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"en | es. Defaults to en.","schema":{"type":"string"},"example":"en"},{"name":"seed","in":"query","required":false,"description":"Same seed always returns the same roast.","schema":{"type":"string"}},{"name":"exclude","in":"query","required":false,"description":"Ids already seen, comma-separated in a GET.","schema":{"type":"array"}}]}},"/v1/content/joke":{"post":{"operationId":"v1ContentJoke","summary":"Random joke - One random joke, in English or Spanish, filtered by category: programming, crypto or general","description":"One random joke, in English or Spanish, filtered by category: programming, crypto or general. Unlike the usual one-liner endpoints this one takes parameters, returns an id so you can exclude what you have already seen, and accepts a seed for a reproducible answer.","tags":["joke","random joke","humour","programming joke","fun"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"language":{"type":"string"},"category":{"type":"string"},"joke":{"type":"string"},"total":{"type":"number"}}},"example":{"id":"j3","language":"en","category":"programming","joke":"Why do programmers prefer dark mode? Because light attracts bugs.","total":6}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"type":"string","description":"programming | crypto | general. Omit for any."},"language":{"type":"string","description":"en | es. Defaults to en."},"seed":{"type":"string","description":"Same seed always returns the same joke."},"exclude":{"type":"array","description":"Ids already seen, comma-separated in a GET."}}},"example":{"category":"programming","language":"en"}}}}},"get":{"operationId":"v1ContentJokeGet","summary":"Random joke - One random joke, in English or Spanish, filtered by category: programming, crypto or general","description":"One random joke, in English or Spanish, filtered by category: programming, crypto or general. Unlike the usual one-liner endpoints this one takes parameters, returns an id so you can exclude what you have already seen, and accepts a seed for a reproducible answer.","tags":["joke","random joke","humour","programming joke","fun"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"language":{"type":"string"},"category":{"type":"string"},"joke":{"type":"string"},"total":{"type":"number"}}},"example":{"id":"j3","language":"en","category":"programming","joke":"Why do programmers prefer dark mode? Because light attracts bugs.","total":6}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"category","in":"query","required":false,"description":"programming | crypto | general. Omit for any.","schema":{"type":"string"},"example":"programming"},{"name":"language","in":"query","required":false,"description":"en | es. Defaults to en.","schema":{"type":"string"},"example":"en"},{"name":"seed","in":"query","required":false,"description":"Same seed always returns the same joke.","schema":{"type":"string"}},{"name":"exclude","in":"query","required":false,"description":"Ids already seen, comma-separated in a GET.","schema":{"type":"array"}}]}},"/v1/content/fact":{"post":{"operationId":"v1ContentFact","summary":"Random fact - One curious but true fact, in English or Spanish, filtered by topic: science, computing, history or nature","description":"One curious but true fact, in English or Spanish, filtered by topic: science, computing, history or nature. Takes parameters, returns an id so you can avoid repeats across a session, and accepts a seed for a reproducible answer.","tags":["random fact","fun fact","trivia","did you know","facts"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"language":{"type":"string"},"topic":{"type":"string"},"fact":{"type":"string"},"total":{"type":"number"}}},"example":{"id":"f4","language":"en","topic":"computing","fact":"The first computer bug was literal: a moth trapped in a relay of the Harvard Mark II in 1947.","total":3}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"topic":{"type":"string","description":"science | computing | history | nature. Omit for any."},"language":{"type":"string","description":"en | es. Defaults to en."},"seed":{"type":"string","description":"Same seed always returns the same fact."},"exclude":{"type":"array","description":"Ids already seen, comma-separated in a GET."}}},"example":{"topic":"computing","language":"en"}}}}},"get":{"operationId":"v1ContentFactGet","summary":"Random fact - One curious but true fact, in English or Spanish, filtered by topic: science, computing, history or nature","description":"One curious but true fact, in English or Spanish, filtered by topic: science, computing, history or nature. Takes parameters, returns an id so you can avoid repeats across a session, and accepts a seed for a reproducible answer.","tags":["random fact","fun fact","trivia","did you know","facts"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"language":{"type":"string"},"topic":{"type":"string"},"fact":{"type":"string"},"total":{"type":"number"}}},"example":{"id":"f4","language":"en","topic":"computing","fact":"The first computer bug was literal: a moth trapped in a relay of the Harvard Mark II in 1947.","total":3}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"topic","in":"query","required":false,"description":"science | computing | history | nature. Omit for any.","schema":{"type":"string"},"example":"computing"},{"name":"language","in":"query","required":false,"description":"en | es. Defaults to en.","schema":{"type":"string"},"example":"en"},{"name":"seed","in":"query","required":false,"description":"Same seed always returns the same fact.","schema":{"type":"string"}},{"name":"exclude","in":"query","required":false,"description":"Ids already seen, comma-separated in a GET.","schema":{"type":"array"}}]}},"/v1/content/riddle":{"post":{"operationId":"v1ContentRiddle","summary":"Riddle with checkable answer - One riddle by difficulty, in English or Spanish, with the answer AND the SHA-256 of the answer in lowercase","description":"One riddle by difficulty, in English or Spanish, with the answer AND the SHA-256 of the answer in lowercase. The hash is the point: an agent can check whether its guess is right without reading the solution first, which no other riddle endpoint lets you do.","tags":["riddle","puzzle","brain teaser","quiz","riddle answer"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"difficulty":{"type":"string"},"riddle":{"type":"string"},"answer":{"type":"string"},"answerSha256":{"type":"string"},"howToCheck":{"type":"string"}}},"example":{"id":"r3","difficulty":"medium","riddle":"I speak without a mouth and hear without ears. I have nobody, but I come alive with wind. What am I?","answer":"An echo","answerSha256":"0x...","howToCheck":"sha256(lowercased, trimmed guess) === answerSha256"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"difficulty":{"type":"string","description":"easy | medium | hard. Omit for any."},"language":{"type":"string","description":"en | es. Defaults to en."},"seed":{"type":"string","description":"Same seed always returns the same riddle."},"exclude":{"type":"array","description":"Ids already seen, comma-separated in a GET."}}},"example":{"difficulty":"medium","language":"en"}}}}},"get":{"operationId":"v1ContentRiddleGet","summary":"Riddle with checkable answer - One riddle by difficulty, in English or Spanish, with the answer AND the SHA-256 of the answer in lowercase","description":"One riddle by difficulty, in English or Spanish, with the answer AND the SHA-256 of the answer in lowercase. The hash is the point: an agent can check whether its guess is right without reading the solution first, which no other riddle endpoint lets you do.","tags":["riddle","puzzle","brain teaser","quiz","riddle answer"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"difficulty":{"type":"string"},"riddle":{"type":"string"},"answer":{"type":"string"},"answerSha256":{"type":"string"},"howToCheck":{"type":"string"}}},"example":{"id":"r3","difficulty":"medium","riddle":"I speak without a mouth and hear without ears. I have nobody, but I come alive with wind. What am I?","answer":"An echo","answerSha256":"0x...","howToCheck":"sha256(lowercased, trimmed guess) === answerSha256"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"difficulty","in":"query","required":false,"description":"easy | medium | hard. Omit for any.","schema":{"type":"string"},"example":"medium"},{"name":"language","in":"query","required":false,"description":"en | es. Defaults to en.","schema":{"type":"string"},"example":"en"},{"name":"seed","in":"query","required":false,"description":"Same seed always returns the same riddle.","schema":{"type":"string"}},{"name":"exclude","in":"query","required":false,"description":"Ids already seen, comma-separated in a GET.","schema":{"type":"array"}}]}},"/v1/content/advice":{"post":{"operationId":"v1ContentAdvice","summary":"One piece of advice - One piece of practical advice about work, life or money, in English or Spanish","description":"One piece of practical advice about work, life or money, in English or Spanish. Short, concrete and usable - not a fortune cookie. Filterable by topic, with an id to avoid repeats and a seed for reproducibility.","tags":["advice","life advice","tip","wisdom","guidance"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"language":{"type":"string"},"topic":{"type":"string"},"advice":{"type":"string"},"total":{"type":"number"}}},"example":{"id":"a3","language":"en","topic":"work","advice":"Measure before you optimise. Most of what feels slow is not what is slow.","total":3}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"topic":{"type":"string","description":"work | life | money. Omit for any."},"language":{"type":"string","description":"en | es. Defaults to en."},"seed":{"type":"string","description":"Same seed always returns the same advice."},"exclude":{"type":"array","description":"Ids already seen, comma-separated in a GET."}}},"example":{"topic":"work","language":"en"}}}}},"get":{"operationId":"v1ContentAdviceGet","summary":"One piece of advice - One piece of practical advice about work, life or money, in English or Spanish","description":"One piece of practical advice about work, life or money, in English or Spanish. Short, concrete and usable - not a fortune cookie. Filterable by topic, with an id to avoid repeats and a seed for reproducibility.","tags":["advice","life advice","tip","wisdom","guidance"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"language":{"type":"string"},"topic":{"type":"string"},"advice":{"type":"string"},"total":{"type":"number"}}},"example":{"id":"a3","language":"en","topic":"work","advice":"Measure before you optimise. Most of what feels slow is not what is slow.","total":3}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"topic","in":"query","required":false,"description":"work | life | money. Omit for any.","schema":{"type":"string"},"example":"work"},{"name":"language","in":"query","required":false,"description":"en | es. Defaults to en.","schema":{"type":"string"},"example":"en"},{"name":"seed","in":"query","required":false,"description":"Same seed always returns the same advice.","schema":{"type":"string"}},{"name":"exclude","in":"query","required":false,"description":"Ids already seen, comma-separated in a GET.","schema":{"type":"array"}}]}},"/v1/content/word-of-the-day":{"post":{"operationId":"v1ContentWordOfTheDay","summary":"Word of the day - The word of the day with its definition, part of speech and an example sentence, in English or Spanish","description":"The word of the day with its definition, part of speech and an example sentence, in English or Spanish. Genuinely of the day: it is picked deterministically from the UTC date, so everyone gets the same word and you can reproduce any past day by passing it. The usual endpoints just return a random word and call it the word of the day.","tags":["word of the day","vocabulary","definition","dictionary","learn"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string"},"language":{"type":"string"},"word":{"type":"string"},"partOfSpeech":{"type":"string"},"definition":{"type":"string"},"example":{"type":"string"}}},"example":{"date":"2026-09-10","language":"en","word":"hysteresis","partOfSpeech":"noun","definition":"When a system's state depends on its history.","example":"The thermostat has hysteresis."}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"language":{"type":"string","description":"en | es. Defaults to en."},"date":{"type":"string","description":"YYYY-MM-DD in UTC. Defaults to today, and any past date is reproducible."}}},"example":{"language":"en"}}}}},"get":{"operationId":"v1ContentWordOfTheDayGet","summary":"Word of the day - The word of the day with its definition, part of speech and an example sentence, in English or Spanish","description":"The word of the day with its definition, part of speech and an example sentence, in English or Spanish. Genuinely of the day: it is picked deterministically from the UTC date, so everyone gets the same word and you can reproduce any past day by passing it. The usual endpoints just return a random word and call it the word of the day.","tags":["word of the day","vocabulary","definition","dictionary","learn"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string"},"language":{"type":"string"},"word":{"type":"string"},"partOfSpeech":{"type":"string"},"definition":{"type":"string"},"example":{"type":"string"}}},"example":{"date":"2026-09-10","language":"en","word":"hysteresis","partOfSpeech":"noun","definition":"When a system's state depends on its history.","example":"The thermostat has hysteresis."}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"language","in":"query","required":false,"description":"en | es. Defaults to en.","schema":{"type":"string"},"example":"en"},{"name":"date","in":"query","required":false,"description":"YYYY-MM-DD in UTC. Defaults to today, and any past date is reproducible.","schema":{"type":"string"}}]}},"/v1/red/email-check":{"post":{"operationId":"v1RedEmailCheck","summary":"Email address check - Scores one email address 0-100 with a verdict (ok, risky, disposable, undeliverable, invalid) and the evidence under it: every point lost is itemised with the field that proves it","description":"Scores one email address 0-100 with a verdict (ok, risky, disposable, undeliverable, invalid) and the evidence under it: every point lost is itemised with the field that proves it. 12,141 disposable domains from two maintained open lists pinned to a commit, 4,897 free providers, 1,018 role names, typo fix (gmial.com > gmail.com), live MX/SPF/DMARC. No SMTP probe, no API key.","tags":["email validation","email verification","verify email","email checker","mx record","spf","dmarc","disposable email","role account","deliverability","dns","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"verdict":{"type":"string"},"score":{"type":"number"},"reasons":{"type":"array","items":{"type":"object"}},"didYouMean":{"type":"string"},"syntaxValid":{"type":"boolean"},"local":{"type":"string"},"domain":{"type":"string"},"domainResolves":{"type":"boolean"},"hasMx":{"type":"boolean"},"nullMx":{"type":"boolean"},"mx":{"type":"array","items":{"type":"object"}},"disposable":{"type":"boolean"},"disposableMatch":{"type":["string","null"]},"freeProvider":{"type":"boolean"},"roleAccount":{"type":"boolean"},"roleMatch":{"type":"object"},"typo":{"type":"object"},"spf":{"type":"string"},"dmarc":{"type":["string","null"]},"dmarcPolicy":{"type":["string","null"]},"scoring":{"type":"array","items":{"type":"object"}},"passMark":{"type":"number"}}},"example":{"email":"sales@gamil.com","verdict":"risky","score":15,"reasons":["looks like a typo of gmail.com","\"sales\" is a role mailbox reserved by RFC 2142","no DMARC record"],"didYouMean":"sales@gmail.com","syntaxValid":true,"local":"sales","domain":"gamil.com","domainResolves":true,"hasMx":true,"nullMx":false,"mx":[{"host":"mail.gamil.com","priority":0}],"disposable":false,"disposableMatch":null,"freeProvider":false,"roleAccount":true,"roleMatch":{"name":"sales","source":"RFC 2142","category":"rfc2142"},"typo":{"suggestion":"gmail.com","distance":1},"spf":"v=spf1 a mx include:s1394.smtp-spf.sureserver.com -all","dmarc":null,"dmarcPolicy":null,"scoring":[{"check":"typo","points":-50,"field":"typo"},{"check":"role mailbox","points":-30,"field":"roleMatch"},{"check":"DMARC","points":-5,"field":"dmarc"}],"passMark":80}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"The address to check, e.g. someone@example.com."}},"required":["email"]},"example":{"email":"sales@gamil.com"}}}}},"get":{"operationId":"v1RedEmailCheckGet","summary":"Email address check - Scores one email address 0-100 with a verdict (ok, risky, disposable, undeliverable, invalid) and the evidence under it: every point lost is itemised with the field that proves it","description":"Scores one email address 0-100 with a verdict (ok, risky, disposable, undeliverable, invalid) and the evidence under it: every point lost is itemised with the field that proves it. 12,141 disposable domains from two maintained open lists pinned to a commit, 4,897 free providers, 1,018 role names, typo fix (gmial.com > gmail.com), live MX/SPF/DMARC. No SMTP probe, no API key.","tags":["email validation","email verification","verify email","email checker","mx record","spf","dmarc","disposable email","role account","deliverability","dns","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"verdict":{"type":"string"},"score":{"type":"number"},"reasons":{"type":"array","items":{"type":"object"}},"didYouMean":{"type":"string"},"syntaxValid":{"type":"boolean"},"local":{"type":"string"},"domain":{"type":"string"},"domainResolves":{"type":"boolean"},"hasMx":{"type":"boolean"},"nullMx":{"type":"boolean"},"mx":{"type":"array","items":{"type":"object"}},"disposable":{"type":"boolean"},"disposableMatch":{"type":["string","null"]},"freeProvider":{"type":"boolean"},"roleAccount":{"type":"boolean"},"roleMatch":{"type":"object"},"typo":{"type":"object"},"spf":{"type":"string"},"dmarc":{"type":["string","null"]},"dmarcPolicy":{"type":["string","null"]},"scoring":{"type":"array","items":{"type":"object"}},"passMark":{"type":"number"}}},"example":{"email":"sales@gamil.com","verdict":"risky","score":15,"reasons":["looks like a typo of gmail.com","\"sales\" is a role mailbox reserved by RFC 2142","no DMARC record"],"didYouMean":"sales@gmail.com","syntaxValid":true,"local":"sales","domain":"gamil.com","domainResolves":true,"hasMx":true,"nullMx":false,"mx":[{"host":"mail.gamil.com","priority":0}],"disposable":false,"disposableMatch":null,"freeProvider":false,"roleAccount":true,"roleMatch":{"name":"sales","source":"RFC 2142","category":"rfc2142"},"typo":{"suggestion":"gmail.com","distance":1},"spf":"v=spf1 a mx include:s1394.smtp-spf.sureserver.com -all","dmarc":null,"dmarcPolicy":null,"scoring":[{"check":"typo","points":-50,"field":"typo"},{"check":"role mailbox","points":-30,"field":"roleMatch"},{"check":"DMARC","points":-5,"field":"dmarc"}],"passMark":80}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"email","in":"query","required":true,"description":"The address to check, e.g. someone@example.com.","schema":{"type":"string"},"example":"sales@gamil.com"}]}},"/v1/red/domain-check":{"post":{"operationId":"v1RedDomainCheck","summary":"Domain DNS check - Everything DNS says about one domain in a single call: whether it is registered, its A and AAAA addresses, nameservers, MX servers, SPF and DMARC, DNSSEC, and whether it looks parked","description":"Everything DNS says about one domain in a single call: whether it is registered, its A and AAAA addresses, nameservers, MX servers, SPF and DMARC, DNSSEC, and whether it looks parked. Built for going through a list of domains one at a time. Live DNS, no API key, no account.","tags":["domain check","dns lookup","domain availability","nameservers","mx record","spf","dmarc","dnssec","a record","parked domain","dns","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"registered":{"type":"boolean"},"a":{"type":"array","items":{"type":"object"}},"aaaa":{"type":"array","items":{"type":"object"}},"nameservers":{"type":"array","items":{"type":"object"}},"mx":{"type":"array","items":{"type":"object"}},"hasWebsite":{"type":"boolean"},"acceptsEmail":{"type":"boolean"},"dnssec":{"type":"boolean"},"parked":{"type":"boolean"}}},"example":{"domain":"example.com","registered":true,"a":["93.184.216.34"],"aaaa":[],"nameservers":["a.iana-servers.net","b.iana-servers.net"],"mx":[],"hasWebsite":true,"acceptsEmail":false,"dnssec":true,"parked":false}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"The domain to check. A full URL or an email address is accepted and reduced to its host."}},"required":["domain"]},"example":{"domain":"example.com"}}}}},"get":{"operationId":"v1RedDomainCheckGet","summary":"Domain DNS check - Everything DNS says about one domain in a single call: whether it is registered, its A and AAAA addresses, nameservers, MX servers, SPF and DMARC, DNSSEC, and whether it looks parked","description":"Everything DNS says about one domain in a single call: whether it is registered, its A and AAAA addresses, nameservers, MX servers, SPF and DMARC, DNSSEC, and whether it looks parked. Built for going through a list of domains one at a time. Live DNS, no API key, no account.","tags":["domain check","dns lookup","domain availability","nameservers","mx record","spf","dmarc","dnssec","a record","parked domain","dns","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"registered":{"type":"boolean"},"a":{"type":"array","items":{"type":"object"}},"aaaa":{"type":"array","items":{"type":"object"}},"nameservers":{"type":"array","items":{"type":"object"}},"mx":{"type":"array","items":{"type":"object"}},"hasWebsite":{"type":"boolean"},"acceptsEmail":{"type":"boolean"},"dnssec":{"type":"boolean"},"parked":{"type":"boolean"}}},"example":{"domain":"example.com","registered":true,"a":["93.184.216.34"],"aaaa":[],"nameservers":["a.iana-servers.net","b.iana-servers.net"],"mx":[],"hasWebsite":true,"acceptsEmail":false,"dnssec":true,"parked":false}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"domain","in":"query","required":true,"description":"The domain to check. A full URL or an email address is accepted and reduced to its host.","schema":{"type":"string"},"example":"example.com"}]}},"/v1/web/read":{"post":{"operationId":"v1WebRead","summary":"Read a web page as markdown - Fetches one URL and returns the readable page as markdown: title, description, headings, paragraphs and links with their destinations, plus the canonical URL, language and word count","description":"Fetches one URL and returns the readable page as markdown: title, description, headings, paragraphs and links with their destinations, plus the canonical URL, language and word count. Boilerplate, scripts and navigation are stripped. Built for going through a list of links one at a time. No API key, no account.","tags":["url to markdown","read url","fetch url","web page to markdown","scrape","html to markdown","extract text","page content","readability","crawler","web reader","list crawling"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"finalUrl":{"type":"string"},"httpStatus":{"type":"number"},"title":{"type":"string"},"description":{"type":["string","null"]},"language":{"type":"string"},"markdown":{"type":"string"},"words":{"type":"number"},"truncated":{"type":"boolean"},"extractedFrom":{"type":"string"},"likelyNeedsJavaScript":{"type":"boolean"}}},"example":{"url":"https://example.com/","finalUrl":"https://example.com/","httpStatus":200,"title":"Example Domain","description":null,"language":"en","markdown":"# Example Domain\n\nThis domain is for use in illustrative examples...","words":28,"truncated":false,"extractedFrom":"body","likelyNeedsJavaScript":false}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"The page to read. http and https only; private and loopback addresses are refused."},"links":{"type":"boolean","description":"Also return the outbound links as a list. Defaults to false."}},"required":["url"]},"example":{"url":"https://example.com"}}}}},"get":{"operationId":"v1WebReadGet","summary":"Read a web page as markdown - Fetches one URL and returns the readable page as markdown: title, description, headings, paragraphs and links with their destinations, plus the canonical URL, language and word count","description":"Fetches one URL and returns the readable page as markdown: title, description, headings, paragraphs and links with their destinations, plus the canonical URL, language and word count. Boilerplate, scripts and navigation are stripped. Built for going through a list of links one at a time. No API key, no account.","tags":["url to markdown","read url","fetch url","web page to markdown","scrape","html to markdown","extract text","page content","readability","crawler","web reader","list crawling"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"finalUrl":{"type":"string"},"httpStatus":{"type":"number"},"title":{"type":"string"},"description":{"type":["string","null"]},"language":{"type":"string"},"markdown":{"type":"string"},"words":{"type":"number"},"truncated":{"type":"boolean"},"extractedFrom":{"type":"string"},"likelyNeedsJavaScript":{"type":"boolean"}}},"example":{"url":"https://example.com/","finalUrl":"https://example.com/","httpStatus":200,"title":"Example Domain","description":null,"language":"en","markdown":"# Example Domain\n\nThis domain is for use in illustrative examples...","words":28,"truncated":false,"extractedFrom":"body","likelyNeedsJavaScript":false}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"url","in":"query","required":true,"description":"The page to read. http and https only; private and loopback addresses are refused.","schema":{"type":"string"},"example":"https://example.com"},{"name":"links","in":"query","required":false,"description":"Also return the outbound links as a list. Defaults to false.","schema":{"type":"boolean"}}]}},"/v1/util/iban":{"post":{"operationId":"v1UtilIban","summary":"IBAN check - Validates one IBAN offline: country, expected length, ISO 7064 mod-97 check digits, whether it is inside SEPA, and the account number split out","description":"Validates one IBAN offline: country, expected length, ISO 7064 mod-97 check digits, whether it is inside SEPA, and the account number split out. Deterministic, no network call and no third party that can go down. Built for cleaning a list of accounts one at a time.","tags":["iban validation","iban check","validate iban","bank account","sepa","mod 97","iso 13616","payments","kyc","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"iban":{"type":"string"},"valid":{"type":"boolean"},"country":{"type":"string"},"countryValid":{"type":"boolean"},"lengthValid":{"type":"boolean"},"checkDigitsValid":{"type":"boolean"},"sepa":{"type":"boolean"},"formatted":{"type":"string"},"bban":{"type":"string"}}},"example":{"iban":"ES9121000418450200051332","valid":true,"country":"ES","countryValid":true,"lengthValid":true,"checkDigitsValid":true,"sepa":true,"formatted":"ES91 2100 0418 4502 0005 1332","bban":"21000418450200051332"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"iban":{"type":"string","description":"The IBAN to check. Spaces and lowercase are accepted."}},"required":["iban"]},"example":{"iban":"ES9121000418450200051332"}}}}},"get":{"operationId":"v1UtilIbanGet","summary":"IBAN check - Validates one IBAN offline: country, expected length, ISO 7064 mod-97 check digits, whether it is inside SEPA, and the account number split out","description":"Validates one IBAN offline: country, expected length, ISO 7064 mod-97 check digits, whether it is inside SEPA, and the account number split out. Deterministic, no network call and no third party that can go down. Built for cleaning a list of accounts one at a time.","tags":["iban validation","iban check","validate iban","bank account","sepa","mod 97","iso 13616","payments","kyc","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"iban":{"type":"string"},"valid":{"type":"boolean"},"country":{"type":"string"},"countryValid":{"type":"boolean"},"lengthValid":{"type":"boolean"},"checkDigitsValid":{"type":"boolean"},"sepa":{"type":"boolean"},"formatted":{"type":"string"},"bban":{"type":"string"}}},"example":{"iban":"ES9121000418450200051332","valid":true,"country":"ES","countryValid":true,"lengthValid":true,"checkDigitsValid":true,"sepa":true,"formatted":"ES91 2100 0418 4502 0005 1332","bban":"21000418450200051332"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"iban","in":"query","required":true,"description":"The IBAN to check. Spaces and lowercase are accepted.","schema":{"type":"string"},"example":"ES9121000418450200051332"}]}},"/v1/util/vat":{"post":{"operationId":"v1UtilVat","summary":"EU VAT number check - Validates one EU VAT number offline: country prefix, the format that country uses, and the published check-digit algorithm where one exists","description":"Validates one EU VAT number offline: country prefix, the format that country uses, and the published check-digit algorithm where one exists. Says explicitly whether the check digits were verified or only the format. Deterministic, no network call. Built for cleaning a list of companies one at a time.","tags":["vat validation","vat number","validate vat","eu vat","vies","tax id","company check","b2b","invoicing","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"vat":{"type":"string"},"normalized":{"type":"string"},"country":{"type":"string"},"formatValid":{"type":"boolean"},"checksumVerified":{"type":"boolean"},"checksumValid":{"type":"boolean"},"valid":{"type":"boolean"},"countriesWithChecksum":{"type":"number"}}},"example":{"vat":"ESB12345674","normalized":"ESB12345674","country":"ES","formatValid":true,"checksumVerified":true,"checksumValid":true,"valid":true,"countriesWithChecksum":12}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"vat":{"type":"string","description":"The VAT number, with or without the country prefix and with any spacing."}},"required":["vat"]},"example":{"vat":"ESB12345674"}}}}},"get":{"operationId":"v1UtilVatGet","summary":"EU VAT number check - Validates one EU VAT number offline: country prefix, the format that country uses, and the published check-digit algorithm where one exists","description":"Validates one EU VAT number offline: country prefix, the format that country uses, and the published check-digit algorithm where one exists. Says explicitly whether the check digits were verified or only the format. Deterministic, no network call. Built for cleaning a list of companies one at a time.","tags":["vat validation","vat number","validate vat","eu vat","vies","tax id","company check","b2b","invoicing","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"vat":{"type":"string"},"normalized":{"type":"string"},"country":{"type":"string"},"formatValid":{"type":"boolean"},"checksumVerified":{"type":"boolean"},"checksumValid":{"type":"boolean"},"valid":{"type":"boolean"},"countriesWithChecksum":{"type":"number"}}},"example":{"vat":"ESB12345674","normalized":"ESB12345674","country":"ES","formatValid":true,"checksumVerified":true,"checksumValid":true,"valid":true,"countriesWithChecksum":12}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"vat","in":"query","required":true,"description":"The VAT number, with or without the country prefix and with any spacing.","schema":{"type":"string"},"example":"ESB12345674"}]}},"/v1/web/status":{"post":{"operationId":"v1WebStatus","summary":"URL status and redirect chain - Checks one URL without downloading the page: HTTP status, the full redirect chain hop by hop with the code of each, the final URL, whether it ends on HTTPS, content type and size, and the security headers the server sends","description":"Checks one URL without downloading the page: HTTP status, the full redirect chain hop by hop with the code of each, the final URL, whether it ends on HTTPS, content type and size, and the security headers the server sends. Built for going through a list of links one at a time. No API key, no account.","tags":["http status checker","link checker","broken links","redirect chain","url status","301 302","dead link","sitemap audit","seo","crawler","list crawling"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"finalUrl":{"type":"string"},"status":{"type":"number"},"ok":{"type":"boolean"},"redirected":{"type":"boolean"},"hops":{"type":"number"},"chain":{"type":"array","items":{"type":"object"}},"finalScheme":{"type":"string"},"contentType":{"type":"string"},"elapsedMs":{"type":"number"}}},"example":{"url":"https://example.com","finalUrl":"https://example.com/","status":200,"ok":true,"redirected":false,"hops":0,"chain":[],"finalScheme":"https","contentType":"text/html","elapsedMs":142}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"The URL to check. http and https only; private and loopback addresses are refused."},"method":{"type":"string","description":"HEAD (default) or GET. Some servers refuse HEAD and only answer GET."}},"required":["url"]},"example":{"url":"https://example.com"}}}}},"get":{"operationId":"v1WebStatusGet","summary":"URL status and redirect chain - Checks one URL without downloading the page: HTTP status, the full redirect chain hop by hop with the code of each, the final URL, whether it ends on HTTPS, content type and size, and the security headers the server sends","description":"Checks one URL without downloading the page: HTTP status, the full redirect chain hop by hop with the code of each, the final URL, whether it ends on HTTPS, content type and size, and the security headers the server sends. Built for going through a list of links one at a time. No API key, no account.","tags":["http status checker","link checker","broken links","redirect chain","url status","301 302","dead link","sitemap audit","seo","crawler","list crawling"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"finalUrl":{"type":"string"},"status":{"type":"number"},"ok":{"type":"boolean"},"redirected":{"type":"boolean"},"hops":{"type":"number"},"chain":{"type":"array","items":{"type":"object"}},"finalScheme":{"type":"string"},"contentType":{"type":"string"},"elapsedMs":{"type":"number"}}},"example":{"url":"https://example.com","finalUrl":"https://example.com/","status":200,"ok":true,"redirected":false,"hops":0,"chain":[],"finalScheme":"https","contentType":"text/html","elapsedMs":142}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"url","in":"query","required":true,"description":"The URL to check. http and https only; private and loopback addresses are refused.","schema":{"type":"string"},"example":"https://example.com"},{"name":"method","in":"query","required":false,"description":"HEAD (default) or GET. Some servers refuse HEAD and only answer GET.","schema":{"type":"string"}}]}},"/v1/red/ip":{"post":{"operationId":"v1RedIp","summary":"IP address intelligence - Looks up one IPv4 or IPv6 address against the two authoritative, keyless public sources: RDAP registry data (who holds the block, in which country, since when, abuse contact) via the ARIN-to-RIR referral chain, and the origin ASN from Team Cymru's DNS service","description":"Looks up one IPv4 or IPv6 address against the two authoritative, keyless public sources: RDAP registry data (who holds the block, in which country, since when, abuse contact) via the ARIN-to-RIR referral chain, and the origin ASN from Team Cymru's DNS service. No city-level geolocation and no VPN/proxy detection — those need a licensed commercial database this endpoint deliberately does not use. Built for going through a list of IPs one at a time.","tags":["ip lookup","ip intelligence","ip geolocation","rdap","whois ip","asn lookup","ip to asn","abuse contact","network registry","fraud detection","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string"},"version":{"type":"number"},"private":{"type":"boolean"},"asn":{"type":"number"},"asnName":{"type":"string"},"asnCountry":{"type":"string"},"registry":{"type":"object"}}},"example":{"ip":"8.8.8.8","version":4,"private":false,"asn":15169,"asnName":"GOOGLE - Google LLC, US","asnCountry":"US","registry":{"source":"rdap.arin.net","name":"APNIC-LABS","country":"AU","cidr":["8.8.8.0/24"]}}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string","description":"The IPv4 or IPv6 address to look up."}},"required":["ip"]},"example":{"ip":"8.8.8.8"}}}}},"get":{"operationId":"v1RedIpGet","summary":"IP address intelligence - Looks up one IPv4 or IPv6 address against the two authoritative, keyless public sources: RDAP registry data (who holds the block, in which country, since when, abuse contact) via the ARIN-to-RIR referral chain, and the origin ASN from Team Cymru's DNS service","description":"Looks up one IPv4 or IPv6 address against the two authoritative, keyless public sources: RDAP registry data (who holds the block, in which country, since when, abuse contact) via the ARIN-to-RIR referral chain, and the origin ASN from Team Cymru's DNS service. No city-level geolocation and no VPN/proxy detection — those need a licensed commercial database this endpoint deliberately does not use. Built for going through a list of IPs one at a time.","tags":["ip lookup","ip intelligence","ip geolocation","rdap","whois ip","asn lookup","ip to asn","abuse contact","network registry","fraud detection","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string"},"version":{"type":"number"},"private":{"type":"boolean"},"asn":{"type":"number"},"asnName":{"type":"string"},"asnCountry":{"type":"string"},"registry":{"type":"object"}}},"example":{"ip":"8.8.8.8","version":4,"private":false,"asn":15169,"asnName":"GOOGLE - Google LLC, US","asnCountry":"US","registry":{"source":"rdap.arin.net","name":"APNIC-LABS","country":"AU","cidr":["8.8.8.0/24"]}}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"ip","in":"query","required":true,"description":"The IPv4 or IPv6 address to look up.","schema":{"type":"string"},"example":"8.8.8.8"}]}},"/v1/red/asn":{"post":{"operationId":"v1RedAsn","summary":"ASN lookup - Everything the authoritative public sources say about one autonomous system number: the RDAP registry record via the ARIN-to-RIR referral chain (holder, status, allocation dates, abuse contact), the AS name, country and RIR from Team Cymru's DNS service, and the prefixes it is announcing right now in the global routing table, from RIPEstat, split into IPv4 and IPv6 with a sample","description":"Everything the authoritative public sources say about one autonomous system number: the RDAP registry record via the ARIN-to-RIR referral chain (holder, status, allocation dates, abuse contact), the AS name, country and RIR from Team Cymru's DNS service, and the prefixes it is announcing right now in the global routing table, from RIPEstat, split into IPv4 and IPv6 with a sample. Keyless and free at the source. The natural second call after /v1/red/ip gives you an origin ASN.","tags":["asn lookup","as number","autonomous system","bgp","announced prefixes","routing table","rdap","whois asn","network intelligence","abuse contact","peering","ip to asn"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"number"},"name":{"type":"string"},"country":{"type":"string"},"registry":{"type":"string"},"allocated":{"type":"string"},"announced":{"type":"boolean"},"prefixes":{"type":"object"},"registry_record":{"type":"object"}}},"example":{"asn":15169,"name":"GOOGLE - Google LLC, US","country":"US","registry":"arin","allocated":"2000-03-30","announced":true,"prefixes":{"v4Count":1200,"v6Count":210,"sample":["8.8.8.0/24","142.251.0.0/24"]},"registry_record":{"source":"rdap.arin.net","handle":"AS15169","name":"GOOGLE","abuseEmails":["network-abuse@google.com"]}}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"string","description":"The AS number, with or without the AS prefix: 15169 or AS15169."}},"required":["asn"]},"example":{"asn":"AS15169"}}}}},"get":{"operationId":"v1RedAsnGet","summary":"ASN lookup - Everything the authoritative public sources say about one autonomous system number: the RDAP registry record via the ARIN-to-RIR referral chain (holder, status, allocation dates, abuse contact), the AS name, country and RIR from Team Cymru's DNS service, and the prefixes it is announcing right now in the global routing table, from RIPEstat, split into IPv4 and IPv6 with a sample","description":"Everything the authoritative public sources say about one autonomous system number: the RDAP registry record via the ARIN-to-RIR referral chain (holder, status, allocation dates, abuse contact), the AS name, country and RIR from Team Cymru's DNS service, and the prefixes it is announcing right now in the global routing table, from RIPEstat, split into IPv4 and IPv6 with a sample. Keyless and free at the source. The natural second call after /v1/red/ip gives you an origin ASN.","tags":["asn lookup","as number","autonomous system","bgp","announced prefixes","routing table","rdap","whois asn","network intelligence","abuse contact","peering","ip to asn"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"number"},"name":{"type":"string"},"country":{"type":"string"},"registry":{"type":"string"},"allocated":{"type":"string"},"announced":{"type":"boolean"},"prefixes":{"type":"object"},"registry_record":{"type":"object"}}},"example":{"asn":15169,"name":"GOOGLE - Google LLC, US","country":"US","registry":"arin","allocated":"2000-03-30","announced":true,"prefixes":{"v4Count":1200,"v6Count":210,"sample":["8.8.8.0/24","142.251.0.0/24"]},"registry_record":{"source":"rdap.arin.net","handle":"AS15169","name":"GOOGLE","abuseEmails":["network-abuse@google.com"]}}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"asn","in":"query","required":true,"description":"The AS number, with or without the AS prefix: 15169 or AS15169.","schema":{"type":"string"},"example":"AS15169"}]}},"/v1/red/dnsbl":{"post":{"operationId":"v1RedDnsbl","summary":"IP blocklist check - Checks one IPv4 address against nine public DNS blocklists at once — SpamCop, UCEPROTECT, PSBL, Barracuda, DroneBL and four more — and returns each list's raw return code plus the reason text the list itself publishes, not a score","description":"Checks one IPv4 address against nine public DNS blocklists at once — SpamCop, UCEPROTECT, PSBL, Barracuda, DroneBL and four more — and returns each list's raw return code plus the reason text the list itself publishes, not a score. Every list is re-checked on each call with its RFC 5782 test entry, so a dead list or one that refuses queries comes back as unavailable instead of reading as clean. Includes the delisting URL for each hit.","tags":["dnsbl","rbl","blocklist check","ip blacklist","spam blocklist","email deliverability","ip reputation","abuse","spamcop","barracuda","log analysis","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string"},"listed":{"type":"boolean"},"listedCount":{"type":"number"},"listsQueried":{"type":"number"},"listsAvailable":{"type":"number"},"listedOn":{"type":"array","items":{"type":"object"}},"results":{"type":"array","items":{"type":"object"}}}},"example":{"ip":"127.0.0.2","listed":true,"listedCount":9,"listsQueried":9,"listsAvailable":9,"listedOn":["bl.spamcop.net","psbl.surriel.com"],"results":[{"list":"bl.spamcop.net","name":"SpamCop Blocking List","listed":true,"codes":["127.0.0.2"],"reason":null,"status":"ok","removal":"https://www.spamcop.net/bl.shtml"}]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string","description":"The IPv4 address to check. IPv6 is not accepted: these nine lists are IPv4 zones."}},"required":["ip"]},"example":{"ip":"127.0.0.2"}}}}},"get":{"operationId":"v1RedDnsblGet","summary":"IP blocklist check - Checks one IPv4 address against nine public DNS blocklists at once — SpamCop, UCEPROTECT, PSBL, Barracuda, DroneBL and four more — and returns each list's raw return code plus the reason text the list itself publishes, not a score","description":"Checks one IPv4 address against nine public DNS blocklists at once — SpamCop, UCEPROTECT, PSBL, Barracuda, DroneBL and four more — and returns each list's raw return code plus the reason text the list itself publishes, not a score. Every list is re-checked on each call with its RFC 5782 test entry, so a dead list or one that refuses queries comes back as unavailable instead of reading as clean. Includes the delisting URL for each hit.","tags":["dnsbl","rbl","blocklist check","ip blacklist","spam blocklist","email deliverability","ip reputation","abuse","spamcop","barracuda","log analysis","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string"},"listed":{"type":"boolean"},"listedCount":{"type":"number"},"listsQueried":{"type":"number"},"listsAvailable":{"type":"number"},"listedOn":{"type":"array","items":{"type":"object"}},"results":{"type":"array","items":{"type":"object"}}}},"example":{"ip":"127.0.0.2","listed":true,"listedCount":9,"listsQueried":9,"listsAvailable":9,"listedOn":["bl.spamcop.net","psbl.surriel.com"],"results":[{"list":"bl.spamcop.net","name":"SpamCop Blocking List","listed":true,"codes":["127.0.0.2"],"reason":null,"status":"ok","removal":"https://www.spamcop.net/bl.shtml"}]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"ip","in":"query","required":true,"description":"The IPv4 address to check. IPv6 is not accepted: these nine lists are IPv4 zones.","schema":{"type":"string"},"example":"127.0.0.2"}]}},"/v1/util/phone":{"post":{"operationId":"v1UtilPhone","summary":"Phone number check - Checks one phone number offline: normalises it to E","description":"Checks one phone number offline: normalises it to E.164, works out its country (including the twelve calling codes shared by several countries, such as +1 US/Canada/Caribbean) and validates the national number length against that country's numbering plan. Returns the tel: URI and the national dialling form. Numbering data from Google's libphonenumber. No network call and no API key, so it cannot fail because a third party is down.","tags":["phone validation","phone number check","validate phone","e164","phone formatting","country code","msisdn","numbering plan","libphonenumber","contact cleaning","list cleaning","crm data quality"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string"},"e164":{"type":"string"},"valid":{"type":"boolean"},"countryCode":{"type":"number"},"country":{"type":"string"},"nationalNumber":{"type":"string"},"length":{"type":"number"},"possibleLengths":{"type":"array","items":{"type":"object"}},"typesByLength":{"type":"array","items":{"type":"object"}},"telUri":{"type":"string"}}},"example":{"phone":"+34 612 34 56 78","e164":"+34612345678","valid":true,"countryCode":34,"country":"ES","nationalNumber":"612345678","length":9,"possibleLengths":[9],"typesByLength":["fixedLine","mobile","tollFree","premiumRate"],"telUri":"tel:+34612345678"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"The phone number, in any usual notation: +34 612 34 56 78, 0034612345678, (612) 345-678."},"country":{"type":"string","description":"Optional ISO 3166-1 alpha-2 country, e.g. ES. Only used when the number carries no country code."}},"required":["phone"]},"example":{"phone":"+34 612 34 56 78"}}}}},"get":{"operationId":"v1UtilPhoneGet","summary":"Phone number check - Checks one phone number offline: normalises it to E","description":"Checks one phone number offline: normalises it to E.164, works out its country (including the twelve calling codes shared by several countries, such as +1 US/Canada/Caribbean) and validates the national number length against that country's numbering plan. Returns the tel: URI and the national dialling form. Numbering data from Google's libphonenumber. No network call and no API key, so it cannot fail because a third party is down.","tags":["phone validation","phone number check","validate phone","e164","phone formatting","country code","msisdn","numbering plan","libphonenumber","contact cleaning","list cleaning","crm data quality"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"phone":{"type":"string"},"e164":{"type":"string"},"valid":{"type":"boolean"},"countryCode":{"type":"number"},"country":{"type":"string"},"nationalNumber":{"type":"string"},"length":{"type":"number"},"possibleLengths":{"type":"array","items":{"type":"object"}},"typesByLength":{"type":"array","items":{"type":"object"}},"telUri":{"type":"string"}}},"example":{"phone":"+34 612 34 56 78","e164":"+34612345678","valid":true,"countryCode":34,"country":"ES","nationalNumber":"612345678","length":9,"possibleLengths":[9],"typesByLength":["fixedLine","mobile","tollFree","premiumRate"],"telUri":"tel:+34612345678"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"phone","in":"query","required":true,"description":"The phone number, in any usual notation: +34 612 34 56 78, 0034612345678, (612) 345-678.","schema":{"type":"string"},"example":"+34 612 34 56 78"},{"name":"country","in":"query","required":false,"description":"Optional ISO 3166-1 alpha-2 country, e.g. ES. Only used when the number carries no country code.","schema":{"type":"string"}}]}},"/v1/fx/convert":{"post":{"operationId":"v1FxConvert","summary":"Currency conversion at the official ECB rate - Converts an amount between any two of the ~30 currencies in the European Central Bank's official reference rates, on today's publication or on a past date within the last 90 days","description":"Converts an amount between any two of the ~30 currencies in the European Central Bank's official reference rates, on today's publication or on a past date within the last 90 days. Returns the rate used, its publication date and whether it was crossed through the euro. This is the auditable rate accounting and customs ask for, not a live market quote: it is published once a day and it is reproducible.","tags":["currency conversion","exchange rate","fx rate","ecb reference rate","eur","historical exchange rate","invoice conversion","accounting","vat","forex","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"amount":{"type":"number"},"converted":{"type":"number"},"rate":{"type":"number"},"date":{"type":"string"},"dateRequested":{"type":["string","null"]},"viaEur":{"type":"boolean"},"source":{"type":"string"}}},"example":{"from":"USD","to":"EUR","amount":100,"converted":86.0882,"rate":0.860882,"date":"2026-09-10","dateRequested":null,"viaEur":false,"source":"European Central Bank euro foreign exchange reference rates"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string","description":"Source currency, ISO 4217, e.g. USD."},"to":{"type":"string","description":"Target currency, ISO 4217, e.g. EUR."},"amount":{"type":"number","description":"Amount to convert. Defaults to 1."},"date":{"type":"string","description":"Optional publication date, YYYY-MM-DD, within the last 90 days. Defaults to the latest publication."}},"required":["from","to"]},"example":{"from":"USD","to":"EUR","amount":100}}}}},"get":{"operationId":"v1FxConvertGet","summary":"Currency conversion at the official ECB rate - Converts an amount between any two of the ~30 currencies in the European Central Bank's official reference rates, on today's publication or on a past date within the last 90 days","description":"Converts an amount between any two of the ~30 currencies in the European Central Bank's official reference rates, on today's publication or on a past date within the last 90 days. Returns the rate used, its publication date and whether it was crossed through the euro. This is the auditable rate accounting and customs ask for, not a live market quote: it is published once a day and it is reproducible.","tags":["currency conversion","exchange rate","fx rate","ecb reference rate","eur","historical exchange rate","invoice conversion","accounting","vat","forex","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"amount":{"type":"number"},"converted":{"type":"number"},"rate":{"type":"number"},"date":{"type":"string"},"dateRequested":{"type":["string","null"]},"viaEur":{"type":"boolean"},"source":{"type":"string"}}},"example":{"from":"USD","to":"EUR","amount":100,"converted":86.0882,"rate":0.860882,"date":"2026-09-10","dateRequested":null,"viaEur":false,"source":"European Central Bank euro foreign exchange reference rates"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"from","in":"query","required":true,"description":"Source currency, ISO 4217, e.g. USD.","schema":{"type":"string"},"example":"USD"},{"name":"to","in":"query","required":true,"description":"Target currency, ISO 4217, e.g. EUR.","schema":{"type":"string"},"example":"EUR"},{"name":"amount","in":"query","required":false,"description":"Amount to convert. Defaults to 1.","schema":{"type":"number"},"example":"100"},{"name":"date","in":"query","required":false,"description":"Optional publication date, YYYY-MM-DD, within the last 90 days. Defaults to the latest publication.","schema":{"type":"string"}}]}},"/v1/red/whois":{"post":{"operationId":"v1RedWhois","summary":"Domain registration lookup (RDAP) - Registration data for one domain, read from the registry's own RDAP service through the IANA bootstrap — not scraped from port-43 whois text","description":"Registration data for one domain, read from the registry's own RDAP service through the IANA bootstrap — not scraped from port-43 whois text. Returns creation, expiry and last-change dates, age and days to expiry, registrar, EPP status codes, nameservers, DNSSEC and the abuse contact. TLDs with no RDAP server say so instead of reporting the domain as unregistered. No API key, no account.","tags":["whois","rdap","domain lookup","domain age","domain expiry","registrar","epp status","dnssec","domain monitoring","brand protection","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"rdapAvailable":{"type":"boolean"},"registered":{"type":"boolean"},"created":{"type":"string"},"expires":{"type":"string"},"ageDays":{"type":"number"},"expiresInDays":{"type":"number"},"registrar":{"type":"string"},"status":{"type":"array","items":{"type":"object"}},"nameservers":{"type":"array","items":{"type":"object"}},"dnssec":{"type":"boolean"}}},"example":{"domain":"example.com","rdapAvailable":true,"registered":true,"created":"1995-08-14T04:00:00Z","expires":"2027-08-13T04:00:00Z","ageDays":11349,"expiresInDays":336,"registrar":"RESERVED-Internet Assigned Numbers Authority","status":["client delete prohibited","client transfer prohibited"],"nameservers":["a.iana-servers.net","b.iana-servers.net"],"dnssec":true}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"The domain to look up. A full URL or an email address is accepted and reduced to its host."}},"required":["domain"]},"example":{"domain":"example.com"}}}}},"get":{"operationId":"v1RedWhoisGet","summary":"Domain registration lookup (RDAP) - Registration data for one domain, read from the registry's own RDAP service through the IANA bootstrap — not scraped from port-43 whois text","description":"Registration data for one domain, read from the registry's own RDAP service through the IANA bootstrap — not scraped from port-43 whois text. Returns creation, expiry and last-change dates, age and days to expiry, registrar, EPP status codes, nameservers, DNSSEC and the abuse contact. TLDs with no RDAP server say so instead of reporting the domain as unregistered. No API key, no account.","tags":["whois","rdap","domain lookup","domain age","domain expiry","registrar","epp status","dnssec","domain monitoring","brand protection","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"rdapAvailable":{"type":"boolean"},"registered":{"type":"boolean"},"created":{"type":"string"},"expires":{"type":"string"},"ageDays":{"type":"number"},"expiresInDays":{"type":"number"},"registrar":{"type":"string"},"status":{"type":"array","items":{"type":"object"}},"nameservers":{"type":"array","items":{"type":"object"}},"dnssec":{"type":"boolean"}}},"example":{"domain":"example.com","rdapAvailable":true,"registered":true,"created":"1995-08-14T04:00:00Z","expires":"2027-08-13T04:00:00Z","ageDays":11349,"expiresInDays":336,"registrar":"RESERVED-Internet Assigned Numbers Authority","status":["client delete prohibited","client transfer prohibited"],"nameservers":["a.iana-servers.net","b.iana-servers.net"],"dnssec":true}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"domain","in":"query","required":true,"description":"The domain to look up. A full URL or an email address is accepted and reduced to its host.","schema":{"type":"string"},"example":"example.com"}]}},"/v1/weather/now":{"post":{"operationId":"v1WeatherNow","summary":"Current weather from the official national forecast - Current conditions for any point on Earth, taken from the Norwegian Meteorological Institute's official forecast model rather than a commercial aggregator","description":"Current conditions for any point on Earth, taken from the Norwegian Meteorological Institute's official forecast model rather than a commercial aggregator. Returns temperature, humidity, pressure, wind speed and bearing, cloud cover and the next hour's precipitation, plus the exact model run it came from and the units the institute itself declares, so the figure can be cited and checked instead of merely trusted.","tags":["weather","current weather","forecast","temperature","wind","precipitation","meteorology","official data","met norway","climate","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"},"altitudeMetres":{"type":"number"},"observedFor":{"type":"string"},"temperatureC":{"type":"number"},"relativeHumidityPct":{"type":"number"},"pressureHpa":{"type":"number"},"windSpeedMs":{"type":"number"},"windFromDegrees":{"type":"number"},"windFromCompass":{"type":"string"},"cloudCoverPct":{"type":"number"},"symbol":{"type":"string"},"conditions":{"type":"string"},"precipitationNext1hMm":{"type":"number"},"next":{"type":"array","items":{"type":"object"}},"modelRun":{"type":"string"},"units":{"type":"object"},"source":{"type":"string"},"license":{"type":"string"}}},"example":{"lat":40.4165,"lon":-3.7026,"altitudeMetres":655,"observedFor":"2026-09-11T09:00:00Z","temperatureC":21.1,"relativeHumidityPct":23.8,"pressureHpa":1020.6,"windSpeedMs":2.4,"windFromDegrees":42.4,"windFromCompass":"NE","cloudCoverPct":0,"symbol":"clearsky_day","conditions":"clear sky (day)","precipitationNext1hMm":0,"next":[{"time":"2026-09-11T10:00:00Z","temperatureC":22.6,"symbol":"clearsky_day","precipitationMm":0}],"modelRun":"2026-09-11T09:17:47Z","units":{"air_temperature":"celsius","wind_speed":"m/s"},"source":"MET Norway (Meteorologisk institutt) locationforecast 2.0","license":"Norwegian Licence for Open Government Data (NLOD) / CC BY 4.0 — attribution to MET Norway required"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"lat":{"type":"number","description":"Latitude in decimal degrees, -90 to 90. Rounded to 4 decimals, which is what the institute accepts."},"lon":{"type":"number","description":"Longitude in decimal degrees, -180 to 180. Rounded to 4 decimals."},"hours":{"type":"number","description":"How many hourly steps to include after the current one, 0-24. Defaults to 6."}},"required":["lat","lon"]},"example":{"lat":40.4165,"lon":-3.7026}}}}},"get":{"operationId":"v1WeatherNowGet","summary":"Current weather from the official national forecast - Current conditions for any point on Earth, taken from the Norwegian Meteorological Institute's official forecast model rather than a commercial aggregator","description":"Current conditions for any point on Earth, taken from the Norwegian Meteorological Institute's official forecast model rather than a commercial aggregator. Returns temperature, humidity, pressure, wind speed and bearing, cloud cover and the next hour's precipitation, plus the exact model run it came from and the units the institute itself declares, so the figure can be cited and checked instead of merely trusted.","tags":["weather","current weather","forecast","temperature","wind","precipitation","meteorology","official data","met norway","climate","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"},"altitudeMetres":{"type":"number"},"observedFor":{"type":"string"},"temperatureC":{"type":"number"},"relativeHumidityPct":{"type":"number"},"pressureHpa":{"type":"number"},"windSpeedMs":{"type":"number"},"windFromDegrees":{"type":"number"},"windFromCompass":{"type":"string"},"cloudCoverPct":{"type":"number"},"symbol":{"type":"string"},"conditions":{"type":"string"},"precipitationNext1hMm":{"type":"number"},"next":{"type":"array","items":{"type":"object"}},"modelRun":{"type":"string"},"units":{"type":"object"},"source":{"type":"string"},"license":{"type":"string"}}},"example":{"lat":40.4165,"lon":-3.7026,"altitudeMetres":655,"observedFor":"2026-09-11T09:00:00Z","temperatureC":21.1,"relativeHumidityPct":23.8,"pressureHpa":1020.6,"windSpeedMs":2.4,"windFromDegrees":42.4,"windFromCompass":"NE","cloudCoverPct":0,"symbol":"clearsky_day","conditions":"clear sky (day)","precipitationNext1hMm":0,"next":[{"time":"2026-09-11T10:00:00Z","temperatureC":22.6,"symbol":"clearsky_day","precipitationMm":0}],"modelRun":"2026-09-11T09:17:47Z","units":{"air_temperature":"celsius","wind_speed":"m/s"},"source":"MET Norway (Meteorologisk institutt) locationforecast 2.0","license":"Norwegian Licence for Open Government Data (NLOD) / CC BY 4.0 — attribution to MET Norway required"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"lat","in":"query","required":true,"description":"Latitude in decimal degrees, -90 to 90. Rounded to 4 decimals, which is what the institute accepts.","schema":{"type":"number"},"example":"40.4165"},{"name":"lon","in":"query","required":true,"description":"Longitude in decimal degrees, -180 to 180. Rounded to 4 decimals.","schema":{"type":"number"},"example":"-3.7026"},{"name":"hours","in":"query","required":false,"description":"How many hourly steps to include after the current one, 0-24. Defaults to 6.","schema":{"type":"number"}}]}},"/v1/weather/forecast":{"post":{"operationId":"v1WeatherForecast","summary":"Multi-day forecast from the official national service - Day-by-day forecast for any point on Earth, up to nine days out, from the Norwegian Meteorological Institute's official model rather than a commercial aggregator","description":"Day-by-day forecast for any point on Earth, up to nine days out, from the Norwegian Meteorological Institute's official model rather than a commercial aggregator. Each day carries its minimum and maximum temperature, total precipitation, strongest wind and the midday symbol, together with the exact model run and the institute's declared units, so a planning decision can cite where the number came from.","tags":["weather forecast","daily forecast","temperature","precipitation","wind","meteorology","official data","met norway","travel planning","agriculture","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"},"altitudeMetres":{"type":"number"},"days":{"type":"array","items":{"type":"object"}},"modelRun":{"type":"string"},"units":{"type":"object"},"source":{"type":"string"},"license":{"type":"string"}}},"example":{"lat":40.4165,"lon":-3.7026,"altitudeMetres":655,"days":[{"date":"2026-09-11","minTemperatureC":14.2,"maxTemperatureC":29.8,"precipitationMm":0,"maxWindSpeedMs":4.1,"symbol":"clearsky_day","conditions":"clear sky (day)","hoursCovered":15,"partial":true}],"modelRun":"2026-09-11T09:17:47Z","units":{"air_temperature":"celsius","precipitation_amount":"mm"},"source":"MET Norway (Meteorologisk institutt) locationforecast 2.0","license":"Norwegian Licence for Open Government Data (NLOD) / CC BY 4.0 — attribution to MET Norway required"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"lat":{"type":"number","description":"Latitude in decimal degrees, -90 to 90. Rounded to 4 decimals."},"lon":{"type":"number","description":"Longitude in decimal degrees, -180 to 180. Rounded to 4 decimals."},"days":{"type":"number","description":"How many days to return, 1-9. Defaults to 5. The last day is usually partial and says so."}},"required":["lat","lon"]},"example":{"lat":40.4165,"lon":-3.7026,"days":5}}}}},"get":{"operationId":"v1WeatherForecastGet","summary":"Multi-day forecast from the official national service - Day-by-day forecast for any point on Earth, up to nine days out, from the Norwegian Meteorological Institute's official model rather than a commercial aggregator","description":"Day-by-day forecast for any point on Earth, up to nine days out, from the Norwegian Meteorological Institute's official model rather than a commercial aggregator. Each day carries its minimum and maximum temperature, total precipitation, strongest wind and the midday symbol, together with the exact model run and the institute's declared units, so a planning decision can cite where the number came from.","tags":["weather forecast","daily forecast","temperature","precipitation","wind","meteorology","official data","met norway","travel planning","agriculture","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"},"altitudeMetres":{"type":"number"},"days":{"type":"array","items":{"type":"object"}},"modelRun":{"type":"string"},"units":{"type":"object"},"source":{"type":"string"},"license":{"type":"string"}}},"example":{"lat":40.4165,"lon":-3.7026,"altitudeMetres":655,"days":[{"date":"2026-09-11","minTemperatureC":14.2,"maxTemperatureC":29.8,"precipitationMm":0,"maxWindSpeedMs":4.1,"symbol":"clearsky_day","conditions":"clear sky (day)","hoursCovered":15,"partial":true}],"modelRun":"2026-09-11T09:17:47Z","units":{"air_temperature":"celsius","precipitation_amount":"mm"},"source":"MET Norway (Meteorologisk institutt) locationforecast 2.0","license":"Norwegian Licence for Open Government Data (NLOD) / CC BY 4.0 — attribution to MET Norway required"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"lat","in":"query","required":true,"description":"Latitude in decimal degrees, -90 to 90. Rounded to 4 decimals.","schema":{"type":"number"},"example":"40.4165"},{"name":"lon","in":"query","required":true,"description":"Longitude in decimal degrees, -180 to 180. Rounded to 4 decimals.","schema":{"type":"number"},"example":"-3.7026"},{"name":"days","in":"query","required":false,"description":"How many days to return, 1-9. Defaults to 5. The last day is usually partial and says so.","schema":{"type":"number"},"example":"5"}]}},"/v1/red/cert":{"post":{"operationId":"v1RedCert","summary":"TLS certificate lookup (Certificate Transparency) - Every currently valid TLS certificate publicly issued for one domain, read from the Certificate Transparency logs: issuer, validity window, days to expiry, revocation status and every hostname each certificate covers","description":"Every currently valid TLS certificate publicly issued for one domain, read from the Certificate Transparency logs: issuer, validity window, days to expiry, revocation status and every hostname each certificate covers. It reports what was ISSUED, which is how you find certificates you did not know existed - not what the server is serving today. No API key, no account.","tags":["ssl check","ssl certificate","tls certificate","certificate expiry","certificate transparency","ct logs","cert monitoring","subdomain discovery","shadow it","domain security","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"source":{"type":"string"},"found":{"type":"boolean"},"count":{"type":"number"},"current":{"type":"object"},"expiringSoon":{"type":"array","items":{"type":"object"}},"issuers":{"type":"array","items":{"type":"object"}},"hostnames":{"type":"array","items":{"type":"object"}}}},"example":{"domain":"github.com","source":"api.certspotter.com","found":true,"count":12,"current":{"issuer":"Sectigo","notAfter":"2026-11-29T23:59:59Z","daysToExpiry":79,"names":["github.com","www.github.com"]},"expiringSoon":[],"issuers":[{"name":"Sectigo","count":8}],"hostnames":["github.com","www.github.com"]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"The domain to look up. A full URL or an email address is accepted and reduced to its host."},"subdomains":{"type":"boolean","description":"Also return certificates issued for subdomains. Defaults to false."}},"required":["domain"]},"example":{"domain":"github.com"}}}}},"get":{"operationId":"v1RedCertGet","summary":"TLS certificate lookup (Certificate Transparency) - Every currently valid TLS certificate publicly issued for one domain, read from the Certificate Transparency logs: issuer, validity window, days to expiry, revocation status and every hostname each certificate covers","description":"Every currently valid TLS certificate publicly issued for one domain, read from the Certificate Transparency logs: issuer, validity window, days to expiry, revocation status and every hostname each certificate covers. It reports what was ISSUED, which is how you find certificates you did not know existed - not what the server is serving today. No API key, no account.","tags":["ssl check","ssl certificate","tls certificate","certificate expiry","certificate transparency","ct logs","cert monitoring","subdomain discovery","shadow it","domain security","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"source":{"type":"string"},"found":{"type":"boolean"},"count":{"type":"number"},"current":{"type":"object"},"expiringSoon":{"type":"array","items":{"type":"object"}},"issuers":{"type":"array","items":{"type":"object"}},"hostnames":{"type":"array","items":{"type":"object"}}}},"example":{"domain":"github.com","source":"api.certspotter.com","found":true,"count":12,"current":{"issuer":"Sectigo","notAfter":"2026-11-29T23:59:59Z","daysToExpiry":79,"names":["github.com","www.github.com"]},"expiringSoon":[],"issuers":[{"name":"Sectigo","count":8}],"hostnames":["github.com","www.github.com"]}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"domain","in":"query","required":true,"description":"The domain to look up. A full URL or an email address is accepted and reduced to its host.","schema":{"type":"string"},"example":"github.com"},{"name":"subdomains","in":"query","required":false,"description":"Also return certificates issued for subdomains. Defaults to false.","schema":{"type":"boolean"}}]}},"/v1/crypto/sanctions":{"post":{"operationId":"v1CryptoSanctions","summary":"OFAC sanctions check for a crypto address - Checks one crypto address against the OFAC SDN list published by the US Treasury, across 16 currencies including Ethereum, Bitcoin, Tron and USDT","description":"Checks one crypto address against the OFAC SDN list published by the US Treasury, across 16 currencies including Ethereum, Bitcoin, Tron and USDT. A hit returns the actual list entry - sanctioned entity, its type and its sanctions programmes - not a risk score. Exact matching only, never fuzzy. Every answer carries the publication date of the list snapshot. No API key, no account.","tags":["ofac","sanctions screening","sdn list","wallet screening","address screening","aml","compliance","sanctioned address","crypto compliance","kyt","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"listed":{"type":"boolean"},"format":{"type":"string"},"currency":{"type":"string"},"entity":{"type":"object"},"list":{"type":"string"},"listPublished":{"type":"string"},"listSize":{"type":"number"}}},"example":{"address":"0x252a8bd2319d8a555b872990601221b3a2053bce","listed":true,"format":"evm","currency":"ETH","entity":{"uid":"24003","name":"MESRI, Behzad","type":"individual","programs":["HRIT-IR","CYBER2"]},"list":"OFAC SDN","listPublished":"2026-09-10T18:31:57.000Z","listSize":505}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"The crypto address to check. Any chain: EVM, Bitcoin, Tron, Litecoin, Monero and the rest of the list."}},"required":["address"]},"example":{"address":"0x252a8bd2319d8a555b872990601221b3a2053bce"}}}}},"get":{"operationId":"v1CryptoSanctionsGet","summary":"OFAC sanctions check for a crypto address - Checks one crypto address against the OFAC SDN list published by the US Treasury, across 16 currencies including Ethereum, Bitcoin, Tron and USDT","description":"Checks one crypto address against the OFAC SDN list published by the US Treasury, across 16 currencies including Ethereum, Bitcoin, Tron and USDT. A hit returns the actual list entry - sanctioned entity, its type and its sanctions programmes - not a risk score. Exact matching only, never fuzzy. Every answer carries the publication date of the list snapshot. No API key, no account.","tags":["ofac","sanctions screening","sdn list","wallet screening","address screening","aml","compliance","sanctioned address","crypto compliance","kyt","list cleaning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"listed":{"type":"boolean"},"format":{"type":"string"},"currency":{"type":"string"},"entity":{"type":"object"},"list":{"type":"string"},"listPublished":{"type":"string"},"listSize":{"type":"number"}}},"example":{"address":"0x252a8bd2319d8a555b872990601221b3a2053bce","listed":true,"format":"evm","currency":"ETH","entity":{"uid":"24003","name":"MESRI, Behzad","type":"individual","programs":["HRIT-IR","CYBER2"]},"list":"OFAC SDN","listPublished":"2026-09-10T18:31:57.000Z","listSize":505}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"address","in":"query","required":true,"description":"The crypto address to check. Any chain: EVM, Bitcoin, Tron, Litecoin, Monero and the rest of the list.","schema":{"type":"string"},"example":"0x252a8bd2319d8a555b872990601221b3a2053bce"}]}},"/v1/ai/image":{"post":{"operationId":"v1AiImage","summary":"Text-to-image (FLUX.1 schnell) - Generates a 1024x1024 JPEG from a text prompt with FLUX","description":"Generates a 1024x1024 JPEG from a text prompt with FLUX.1 [schnell] in about 2 seconds. Returns a hosted image URL valid for 24 hours that you can hand straight to the next tool; add inline=true to also get the base64. Choose 1-8 diffusion steps (default 4). You are only charged if the image is delivered. No API key, no account.","tags":["text to image","image generation","flux","ai image","generate image","stable diffusion alternative"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"expires":{"type":"string"},"mime":{"type":"string"},"width":{"type":"number"},"height":{"type":"number"},"steps":{"type":"number"},"model":{"type":"string"},"bytes":{"type":"number"}}},"example":{"url":"https://flat-rate-llm.kikoribera03.workers.dev/m/5f0c2a9e41b7d3e8a6c1f042.jpg","expires":"2026-09-14T18:00:00.000Z","mime":"image/jpeg","width":1024,"height":1024,"steps":4,"model":"@cf/black-forest-labs/flux-1-schnell","bytes":585346}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","description":"What to draw, up to 2048 characters. English works best."},"steps":{"type":"number","description":"Diffusion steps, 1-8. More is sharper and slower. Default 4."},"inline":{"type":"boolean","description":"Also return the JPEG as base64. Default false."}},"required":["prompt"]},"example":{"prompt":"a red fox reading a newspaper, watercolor","steps":4}}}}},"get":{"operationId":"v1AiImageGet","summary":"Text-to-image (FLUX.1 schnell) - Generates a 1024x1024 JPEG from a text prompt with FLUX","description":"Generates a 1024x1024 JPEG from a text prompt with FLUX.1 [schnell] in about 2 seconds. Returns a hosted image URL valid for 24 hours that you can hand straight to the next tool; add inline=true to also get the base64. Choose 1-8 diffusion steps (default 4). You are only charged if the image is delivered. No API key, no account.","tags":["text to image","image generation","flux","ai image","generate image","stable diffusion alternative"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"expires":{"type":"string"},"mime":{"type":"string"},"width":{"type":"number"},"height":{"type":"number"},"steps":{"type":"number"},"model":{"type":"string"},"bytes":{"type":"number"}}},"example":{"url":"https://flat-rate-llm.kikoribera03.workers.dev/m/5f0c2a9e41b7d3e8a6c1f042.jpg","expires":"2026-09-14T18:00:00.000Z","mime":"image/jpeg","width":1024,"height":1024,"steps":4,"model":"@cf/black-forest-labs/flux-1-schnell","bytes":585346}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"prompt","in":"query","required":true,"description":"What to draw, up to 2048 characters. English works best.","schema":{"type":"string"},"example":"a red fox reading a newspaper, watercolor"},{"name":"steps","in":"query","required":false,"description":"Diffusion steps, 1-8. More is sharper and slower. Default 4.","schema":{"type":"number"},"example":"4"},{"name":"inline","in":"query","required":false,"description":"Also return the JPEG as base64. Default false.","schema":{"type":"boolean"}}]}},"/v1/ai/image-styled":{"post":{"operationId":"v1AiImageStyled","summary":"Illustration from text, with a seed (DreamShaper 8) - Generates an illustration from a text prompt with DreamShaper 8 LCM in about 2 seconds: painterly and character art rather than photoreal","description":"Generates an illustration from a text prompt with DreamShaper 8 LCM in about 2 seconds: painterly and character art rather than photoreal. Takes a seed for a repeatable result, a negative prompt, and your own width and height. Returns a hosted image URL valid for 24 hours; add inline=true to also get the base64. You are only charged if the image is delivered. No API key, no account.","tags":["illustration","text to image","art","character art","seed","stable diffusion"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"expires":{"type":"string"},"mime":{"type":"string"},"width":{"type":"number"},"height":{"type":"number"},"seed":{"type":"number"},"model":{"type":"string"},"bytes":{"type":"number"}}},"example":{"url":"https://flat-rate-llm.kikoribera03.workers.dev/m/7b1d3e8a6c1f0425f0c2a9e4.png","expires":"2026-10-02T00:00:00.000Z","mime":"image/png","width":1024,"height":1024,"seed":42,"model":"@cf/lykon/dreamshaper-8-lcm","bytes":471028}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","description":"What to draw, up to 2048 characters. English works best."},"negative_prompt":{"type":"string","description":"What to keep out of the image, up to 1024 characters."},"width":{"type":"number","description":"Width in pixels, a multiple of 8 between 256 and 1536. Default 1024."},"height":{"type":"number","description":"Height in pixels, a multiple of 8 between 256 and 1536. Default 1024."},"steps":{"type":"number","description":"Diffusion steps, 1-20."},"guidance":{"type":"number","description":"How closely to follow the prompt, 0-20."},"seed":{"type":"number","description":"Same prompt and same seed give the same image."},"inline":{"type":"boolean","description":"Also return the image as base64. Default false."}},"required":["prompt"]},"example":{"prompt":"a red fox reading a newspaper, watercolor","seed":42}}}}},"get":{"operationId":"v1AiImageStyledGet","summary":"Illustration from text, with a seed (DreamShaper 8) - Generates an illustration from a text prompt with DreamShaper 8 LCM in about 2 seconds: painterly and character art rather than photoreal","description":"Generates an illustration from a text prompt with DreamShaper 8 LCM in about 2 seconds: painterly and character art rather than photoreal. Takes a seed for a repeatable result, a negative prompt, and your own width and height. Returns a hosted image URL valid for 24 hours; add inline=true to also get the base64. You are only charged if the image is delivered. No API key, no account.","tags":["illustration","text to image","art","character art","seed","stable diffusion"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"expires":{"type":"string"},"mime":{"type":"string"},"width":{"type":"number"},"height":{"type":"number"},"seed":{"type":"number"},"model":{"type":"string"},"bytes":{"type":"number"}}},"example":{"url":"https://flat-rate-llm.kikoribera03.workers.dev/m/7b1d3e8a6c1f0425f0c2a9e4.png","expires":"2026-10-02T00:00:00.000Z","mime":"image/png","width":1024,"height":1024,"seed":42,"model":"@cf/lykon/dreamshaper-8-lcm","bytes":471028}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"prompt","in":"query","required":true,"description":"What to draw, up to 2048 characters. English works best.","schema":{"type":"string"},"example":"a red fox reading a newspaper, watercolor"},{"name":"negative_prompt","in":"query","required":false,"description":"What to keep out of the image, up to 1024 characters.","schema":{"type":"string"}},{"name":"width","in":"query","required":false,"description":"Width in pixels, a multiple of 8 between 256 and 1536. Default 1024.","schema":{"type":"number"}},{"name":"height","in":"query","required":false,"description":"Height in pixels, a multiple of 8 between 256 and 1536. Default 1024.","schema":{"type":"number"}},{"name":"steps","in":"query","required":false,"description":"Diffusion steps, 1-20.","schema":{"type":"number"}},{"name":"guidance","in":"query","required":false,"description":"How closely to follow the prompt, 0-20.","schema":{"type":"number"}},{"name":"seed","in":"query","required":false,"description":"Same prompt and same seed give the same image.","schema":{"type":"number"},"example":"42"},{"name":"inline","in":"query","required":false,"description":"Also return the image as base64. Default false.","schema":{"type":"boolean"}}]}},"/v1/ai/image-edit":{"post":{"operationId":"v1AiImageEdit","summary":"Edit an image you already have (inpainting) - Edits an image you provide instead of generating one from scratch: pass the image and a black-and-white mask, and Stable Diffusion inpainting repaints only the white area following your prompt","description":"Edits an image you provide instead of generating one from scratch: pass the image and a black-and-white mask, and Stable Diffusion inpainting repaints only the white area following your prompt. Image and mask go as https URLs or as base64, up to 10 MB each. Returns a hosted image URL valid for 24 hours. You are only charged if the edit is delivered. No API key, no account.","tags":["inpainting","image editing","edit image","mask","remove object","stable diffusion"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"expires":{"type":"string"},"mime":{"type":"string"},"model":{"type":"string"},"bytes":{"type":"number"}}},"example":{"url":"https://flat-rate-llm.kikoribera03.workers.dev/m/0425f0c2a9e47b1d3e8a6c1f.png","expires":"2026-10-02T00:00:00.000Z","mime":"image/png","model":"@cf/runwayml/stable-diffusion-v1-5-inpainting","bytes":465282}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","description":"What to paint into the masked area, up to 2048 characters."},"url":{"type":"string","description":"https URL of the image to edit. Use this or image."},"image":{"type":"string","description":"The image to edit, as base64. Use this or url."},"mask_url":{"type":"string","description":"https URL of the mask: white where it should repaint, black where it must not. Use this or mask."},"mask":{"type":"string","description":"The mask, as base64. Use this or mask_url."},"steps":{"type":"number","description":"Diffusion steps, 1-20."},"guidance":{"type":"number","description":"How closely to follow the prompt, 0-20."},"seed":{"type":"number","description":"Same inputs and same seed give the same edit."}},"required":["prompt"]},"example":{"prompt":"a blue wool hat on the fox","url":"https://flat-rate-llm.kikoribera03.workers.dev/m/muestra-imagen.jpg","mask_url":"https://flat-rate-llm.kikoribera03.workers.dev/m/muestra-mascara.png"}}}}},"get":{"operationId":"v1AiImageEditGet","summary":"Edit an image you already have (inpainting) - Edits an image you provide instead of generating one from scratch: pass the image and a black-and-white mask, and Stable Diffusion inpainting repaints only the white area following your prompt","description":"Edits an image you provide instead of generating one from scratch: pass the image and a black-and-white mask, and Stable Diffusion inpainting repaints only the white area following your prompt. Image and mask go as https URLs or as base64, up to 10 MB each. Returns a hosted image URL valid for 24 hours. You are only charged if the edit is delivered. No API key, no account.","tags":["inpainting","image editing","edit image","mask","remove object","stable diffusion"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"expires":{"type":"string"},"mime":{"type":"string"},"model":{"type":"string"},"bytes":{"type":"number"}}},"example":{"url":"https://flat-rate-llm.kikoribera03.workers.dev/m/0425f0c2a9e47b1d3e8a6c1f.png","expires":"2026-10-02T00:00:00.000Z","mime":"image/png","model":"@cf/runwayml/stable-diffusion-v1-5-inpainting","bytes":465282}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"prompt","in":"query","required":true,"description":"What to paint into the masked area, up to 2048 characters.","schema":{"type":"string"},"example":"a blue wool hat on the fox"},{"name":"url","in":"query","required":false,"description":"https URL of the image to edit. Use this or image.","schema":{"type":"string"},"example":"https://flat-rate-llm.kikoribera03.workers.dev/m/muestra-imagen.jpg"},{"name":"image","in":"query","required":false,"description":"The image to edit, as base64. Use this or url.","schema":{"type":"string"}},{"name":"mask_url","in":"query","required":false,"description":"https URL of the mask: white where it should repaint, black where it must not. Use this or mask.","schema":{"type":"string"},"example":"https://flat-rate-llm.kikoribera03.workers.dev/m/muestra-mascara.png"},{"name":"mask","in":"query","required":false,"description":"The mask, as base64. Use this or mask_url.","schema":{"type":"string"}},{"name":"steps","in":"query","required":false,"description":"Diffusion steps, 1-20.","schema":{"type":"number"}},{"name":"guidance","in":"query","required":false,"description":"How closely to follow the prompt, 0-20.","schema":{"type":"number"}},{"name":"seed","in":"query","required":false,"description":"Same inputs and same seed give the same edit.","schema":{"type":"number"}}]}},"/v1/ai/image-describe":{"post":{"operationId":"v1AiImageDescribe","summary":"Describe what is in an image - Describes what is in an image in about one second: pass an https URL or base64 and ask anything about it, from a one-line caption to reading a sign","description":"Describes what is in an image in about one second: pass an https URL or base64 and ask anything about it, from a one-line caption to reading a sign. Pairs with the rest of the chain: describe an image, translate the description, then have it read aloud. You are only charged if the description is delivered. No API key, no account.","tags":["image to text","image captioning","describe image","vision","alt text","llava"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"model":{"type":"string"},"imageBytes":{"type":"number"}}},"example":{"description":"A fox is sitting on a chair and reading a newspaper.","model":"gemini/gemini-3.5-flash-lite","imageBytes":45311}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"https URL of the image to describe. Use this or image."},"image":{"type":"string","description":"The image, as base64. Use this or url."},"prompt":{"type":"string","description":"What to ask about the image. Default: a one-sentence description."},"max_tokens":{"type":"number","description":"Length limit of the answer, 16-512. Default 128."}}},"example":{"url":"https://flat-rate-llm.kikoribera03.workers.dev/m/muestra-imagen.jpg","prompt":"Describe this image in one sentence."}}}}},"get":{"operationId":"v1AiImageDescribeGet","summary":"Describe what is in an image - Describes what is in an image in about one second: pass an https URL or base64 and ask anything about it, from a one-line caption to reading a sign","description":"Describes what is in an image in about one second: pass an https URL or base64 and ask anything about it, from a one-line caption to reading a sign. Pairs with the rest of the chain: describe an image, translate the description, then have it read aloud. You are only charged if the description is delivered. No API key, no account.","tags":["image to text","image captioning","describe image","vision","alt text","llava"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"model":{"type":"string"},"imageBytes":{"type":"number"}}},"example":{"description":"A fox is sitting on a chair and reading a newspaper.","model":"gemini/gemini-3.5-flash-lite","imageBytes":45311}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"url","in":"query","required":false,"description":"https URL of the image to describe. Use this or image.","schema":{"type":"string"},"example":"https://flat-rate-llm.kikoribera03.workers.dev/m/muestra-imagen.jpg"},{"name":"image","in":"query","required":false,"description":"The image, as base64. Use this or url.","schema":{"type":"string"}},{"name":"prompt","in":"query","required":false,"description":"What to ask about the image. Default: a one-sentence description.","schema":{"type":"string"},"example":"Describe this image in one sentence."},{"name":"max_tokens","in":"query","required":false,"description":"Length limit of the answer, 16-512. Default 128.","schema":{"type":"number"}}]}},"/v1/ai/speech":{"post":{"operationId":"v1AiSpeech","summary":"Text-to-speech (Aura-2 / MeloTTS) - Turns text into natural speech in English, Spanish, French, Chinese, Japanese or Korean in one or two seconds: Deepgram Aura-2 for English and Spanish, MeloTTS for the rest","description":"Turns text into natural speech in English, Spanish, French, Chinese, Japanese or Korean in one or two seconds: Deepgram Aura-2 for English and Spanish, MeloTTS for the rest. Returns a hosted audio URL valid for 24 hours (MP3 for English and Spanish, WAV otherwise) plus its size; add inline=true to also get the base64. Up to 2000 characters per call. You are only charged if the audio is delivered. No API key, no account.","tags":["text to speech","tts","speech synthesis","voice","audio generation","read aloud"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"expires":{"type":"string"},"mime":{"type":"string"},"lang":{"type":"string"},"characters":{"type":"number"},"model":{"type":"string"},"bytes":{"type":"number"}}},"example":{"url":"https://flat-rate-llm.kikoribera03.workers.dev/m/9b2e6d4a1c0f8e7d3a5b2c11.mp3","expires":"2026-09-14T18:00:00.000Z","mime":"audio/mpeg","lang":"en","characters":50,"model":"@cf/deepgram/aura-2-en","bytes":16128}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"What to say, up to 2000 characters."},"lang":{"type":"string","description":"en, es, fr, zh, ja or ko. Default en."},"inline":{"type":"boolean","description":"Also return the WAV as base64. Default false."}},"required":["text"]},"example":{"text":"Your order has shipped and will arrive on Tuesday.","lang":"en"}}}}},"get":{"operationId":"v1AiSpeechGet","summary":"Text-to-speech (Aura-2 / MeloTTS) - Turns text into natural speech in English, Spanish, French, Chinese, Japanese or Korean in one or two seconds: Deepgram Aura-2 for English and Spanish, MeloTTS for the rest","description":"Turns text into natural speech in English, Spanish, French, Chinese, Japanese or Korean in one or two seconds: Deepgram Aura-2 for English and Spanish, MeloTTS for the rest. Returns a hosted audio URL valid for 24 hours (MP3 for English and Spanish, WAV otherwise) plus its size; add inline=true to also get the base64. Up to 2000 characters per call. You are only charged if the audio is delivered. No API key, no account.","tags":["text to speech","tts","speech synthesis","voice","audio generation","read aloud"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"expires":{"type":"string"},"mime":{"type":"string"},"lang":{"type":"string"},"characters":{"type":"number"},"model":{"type":"string"},"bytes":{"type":"number"}}},"example":{"url":"https://flat-rate-llm.kikoribera03.workers.dev/m/9b2e6d4a1c0f8e7d3a5b2c11.mp3","expires":"2026-09-14T18:00:00.000Z","mime":"audio/mpeg","lang":"en","characters":50,"model":"@cf/deepgram/aura-2-en","bytes":16128}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"text","in":"query","required":true,"description":"What to say, up to 2000 characters.","schema":{"type":"string"},"example":"Your order has shipped and will arrive on Tuesday."},{"name":"lang","in":"query","required":false,"description":"en, es, fr, zh, ja or ko. Default en.","schema":{"type":"string"},"example":"en"},{"name":"inline","in":"query","required":false,"description":"Also return the WAV as base64. Default false.","schema":{"type":"boolean"}}]}},"/v1/ai/transcribe":{"post":{"operationId":"v1AiTranscribe","summary":"Speech-to-text (Whisper large v3 turbo) - Transcribes an audio file with Whisper large v3 turbo: pass an https URL (mp3, wav, flac, m4a, ogg, up to 10 MB) or base64 audio in a POST","description":"Transcribes an audio file with Whisper large v3 turbo: pass an https URL (mp3, wav, flac, m4a, ogg, up to 10 MB) or base64 audio in a POST. Returns the text, the detected language with its probability, the duration, and timed segments; add words=true for word-level timestamps. Around 100 languages. You are only charged if the transcript is delivered. No API key, no account.","tags":["speech to text","transcription","whisper","audio transcription","stt","subtitles"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string"},"language":{"type":"string"},"languageProbability":{"type":"number"},"durationSeconds":{"type":"number"},"segments":{"type":"array","items":{"type":"object"}},"model":{"type":"string"}}},"example":{"text":"Hello from the Flat Rate Gateway, this is a short test.","language":"en","languageProbability":1,"durationSeconds":3.27,"segments":[{"start":0,"end":2.8,"text":"Hello from the Flat Rate Gateway, this is a short test."}],"model":"@cf/openai/whisper-large-v3-turbo"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"https URL of the audio file, up to 10 MB."},"audio":{"type":"string","description":"Alternative to url: the audio as base64 (POST only)."},"language":{"type":"string","description":"Optional ISO code to skip detection, e.g. es."},"words":{"type":"boolean","description":"Include word-level timestamps. Default false."}}},"example":{"url":"https://flat-rate-llm.kikoribera03.workers.dev/m/muestra-voz.wav"}}}}},"get":{"operationId":"v1AiTranscribeGet","summary":"Speech-to-text (Whisper large v3 turbo) - Transcribes an audio file with Whisper large v3 turbo: pass an https URL (mp3, wav, flac, m4a, ogg, up to 10 MB) or base64 audio in a POST","description":"Transcribes an audio file with Whisper large v3 turbo: pass an https URL (mp3, wav, flac, m4a, ogg, up to 10 MB) or base64 audio in a POST. Returns the text, the detected language with its probability, the duration, and timed segments; add words=true for word-level timestamps. Around 100 languages. You are only charged if the transcript is delivered. No API key, no account.","tags":["speech to text","transcription","whisper","audio transcription","stt","subtitles"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string"},"language":{"type":"string"},"languageProbability":{"type":"number"},"durationSeconds":{"type":"number"},"segments":{"type":"array","items":{"type":"object"}},"model":{"type":"string"}}},"example":{"text":"Hello from the Flat Rate Gateway, this is a short test.","language":"en","languageProbability":1,"durationSeconds":3.27,"segments":[{"start":0,"end":2.8,"text":"Hello from the Flat Rate Gateway, this is a short test."}],"model":"@cf/openai/whisper-large-v3-turbo"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"url","in":"query","required":false,"description":"https URL of the audio file, up to 10 MB.","schema":{"type":"string"},"example":"https://flat-rate-llm.kikoribera03.workers.dev/m/muestra-voz.wav"},{"name":"audio","in":"query","required":false,"description":"Alternative to url: the audio as base64 (POST only).","schema":{"type":"string"}},{"name":"language","in":"query","required":false,"description":"Optional ISO code to skip detection, e.g. es.","schema":{"type":"string"}},{"name":"words","in":"query","required":false,"description":"Include word-level timestamps. Default false.","schema":{"type":"boolean"}}]}},"/v1/ai/translate":{"post":{"operationId":"v1AiTranslate","summary":"Translate text (M2M100, 100 languages) - Translates text between about 100 languages with Meta M2M100 1","description":"Translates text between about 100 languages with Meta M2M100 1.2B: pass the text and the target language (ISO code like es, fr, de, zh, ja, or its English name); the source language is detected if omitted. Long texts are split by sentence, so paragraphs keep their order and line breaks. Up to 2000 characters per call. Pairs with speech-to-text: translate a transcript, then read it aloud. You are only charged if the translation is delivered. No API key, no account.","tags":["translation","translate","machine translation","multilingual","language","localization"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"characters":{"type":"number"},"pieces":{"type":"number"},"model":{"type":"string"}}},"example":{"text":"Su pedido ha sido enviado y llegará el martes.","from":"auto","to":"es","characters":50,"pieces":1,"model":"@cf/meta/m2m100-1.2b"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"What to translate, up to 2000 characters."},"to":{"type":"string","description":"Target language: ISO code (es, fr, de, zh, ja...) or English name (spanish)."},"from":{"type":"string","description":"Optional source language; detected when omitted."}},"required":["text","to"]},"example":{"text":"Your order has shipped and will arrive on Tuesday.","to":"es"}}}}},"get":{"operationId":"v1AiTranslateGet","summary":"Translate text (M2M100, 100 languages) - Translates text between about 100 languages with Meta M2M100 1","description":"Translates text between about 100 languages with Meta M2M100 1.2B: pass the text and the target language (ISO code like es, fr, de, zh, ja, or its English name); the source language is detected if omitted. Long texts are split by sentence, so paragraphs keep their order and line breaks. Up to 2000 characters per call. Pairs with speech-to-text: translate a transcript, then read it aloud. You are only charged if the translation is delivered. No API key, no account.","tags":["translation","translate","machine translation","multilingual","language","localization"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"characters":{"type":"number"},"pieces":{"type":"number"},"model":{"type":"string"}}},"example":{"text":"Su pedido ha sido enviado y llegará el martes.","from":"auto","to":"es","characters":50,"pieces":1,"model":"@cf/meta/m2m100-1.2b"}}}},"400":{"description":"Invalid input"},"402":{"description":"Payment Required"},"502":{"description":"Upstream provider failed after payment"}},"parameters":[{"name":"text","in":"query","required":true,"description":"What to translate, up to 2000 characters.","schema":{"type":"string"},"example":"Your order has shipped and will arrive on Tuesday."},{"name":"to","in":"query","required":true,"description":"Target language: ISO code (es, fr, de, zh, ja...) or English name (spanish).","schema":{"type":"string"},"example":"es"},{"name":"from","in":"query","required":false,"description":"Optional source language; detected when omitted.","schema":{"type":"string"}}]}},"/":{"get":{"operationId":"catalogue","summary":"Service catalogue","security":[]}},"/modelos":{"get":{"operationId":"models","summary":"Which models are live right now","security":[]}},"/openapi.json":{"get":{"operationId":"openapi","summary":"This document","security":[]}},"/diag":{"get":{"operationId":"diag","summary":"Facilitator connectivity check","security":[]}}}}