{"service":"Datapackvibe","protocol":"x402","network":"eip155:8453","payTo":"0x93a2d00eb7b4cdd6b0ed71ef9d696ddf3009ae90","asset":"USDC","how":"POST to any path below. You get HTTP 402 with payment requirements, pay in USDC, retry with the payment header, and the result comes back.","endpoints":[{"path":"/build","method":"POST","price":"$0.50","description":"Build a requested artifact from a JSON brief","example_request":{"spec":"HTTP endpoint returning current Ethereum gas price in gwei","language":"typescript"},"example_response":{"status":"built","path":"/gas/price","files":["handler.ts"],"notes":"Reads eth_gasPrice, returns {gwei, wei, block}."}},{"path":"/tx/explain","method":"POST","price":"$0.03","description":"Explain any Ethereum transaction or calldata the caller pastes - decodes the 4-byte selector and ABI words into a named function, typed parameters and a plain-English summary, plus an explicit list of what the payload does not tell you. Pure input-in/answer-out: no chain lookup, no invented values.","example_request":{"to":"0xdAC17F958D2ee523a2206206994597C13D831ec7","value_wei":"0","calldata":"0xa9059cbb000000000000000000000000ab5801a7d398351b8be11c439e05c5b3259aec9b00000000000000000000000000000000000000000000000000000000000f4240","chain":"ethereum"},"example_response":{"function":"transfer(address,uint256)","selector":"0xa9059cbb","confidence":"high","params":{"recipient":"0xab5801a7d398351b8be11c439e05c5b3259aec9b","amount_base_units":"1000000"},"native_value_eth":"0","summary":"This calls transfer() on the contract at 0xdAC17F95...831ec7, moving 1000000 base units of that token to 0xab5801a7...aec9b. No native ETH is attached to the transaction.","risk_notes":["A token transfer is irreversible once mined - check the recipient address character by character.","Token decimals were not supplied, so the human-readable amount cannot be derived from this input alone."],"unresolved":["token_symbol","token_decimals"]}},{"path":"/log/decode","method":"POST","price":"$0.03","description":"Decode Ethereum event logs the caller pastes - topics and data into a named event with typed parameters. Input-in/answer-out: no chain lookup, no invented values.","example_request":{"logs":[{"topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x000000000000000000000000ab5801a7d398351b8be11c439e05c5b3259aec9b","0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045"],"data":"0x00000000000000000000000000000000000000000000000000000000000f4240"}]},"example_response":{"events":[{"name":"Transfer(address,address,uint256)","params":{"from":"0xab5801a7d398351b8be11c439e05c5b3259aec9b","to":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","value_base_units":"1000000"},"summary":"A token transfer of 1000000 base units.","unresolved":["token_symbol","token_decimals"]}]}},{"path":"/sign/explain","method":"POST","price":"$0.03","description":"Explain an EIP-712 typed-data payload before you sign it - what the signature authorises, in plain English, plus what the payload does not tell you. No chain lookup.","example_request":{"domain":{"name":"USD Coin","version":"2","chainId":1,"verifyingContract":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},"primaryType":"Permit","types":{"Permit":[{"name":"owner","type":"address"},{"name":"spender","type":"address"},{"name":"value","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"deadline","type":"uint256"}]},"message":{"owner":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","spender":"0x1111111254eeb25477b68fb85ed929f73a960582","value":"115792089237316195423570985008687907853269984665640564039457584007913129639935","nonce":"0","deadline":"1780000000"}},"example_response":{"authorises":"Signing this lets 0x11111112...960582 move USD Coin out of your wallet on your behalf, without a further transaction from you.","primary_type":"Permit","fields":{"spender":"0x1111111254eeb25477b68fb85ed929f73a960582","value_base_units":"115792089237316195423570985008687907853269984665640564039457584007913129639935","deadline":"1780000000"},"flags":["The value is 2^256-1, an unlimited approval - the spender can move any amount, now or later."],"unresolved":["whether the spender contract is one you trust","token decimals"]}},{"path":"/contract/review","method":"POST","price":"$0.005","description":"Ranked security review of Solidity source the caller pastes - findings with the evidence line, severity and the concrete fix. Reads only the code supplied.","example_request":{"source":"contract Vault { mapping(address=>uint) bal; function withdraw() external { uint a = bal[msg.sender]; (bool ok,) = msg.sender.call{value:a}(\"\"); require(ok); bal[msg.sender] = 0; } }","focus":"withdrawals"},"example_response":{"findings":[{"severity":"critical","where":"withdraw()","what":"State is zeroed after the external call, so a contract that re-enters withdraw() from its receive() drains the whole balance.","fix":"Set bal[msg.sender] = 0 before the call, or use a reentrancy guard."}],"not_reviewed":["Any imported base contract - none was supplied.","Deployment configuration and who holds any admin role."]}},{"path":"/revert/explain","method":"POST","price":"$0.005","description":"Decode an EVM revert - Error(string), Panic(uint256) or a custom error selector - into the real reason a transaction failed and the concrete fix. Caller supplies the raw revert hex from a failed eth_call or receipt; no RPC lookup required.","example_request":{"revert_data":"0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001d45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000","function":"transferFrom","to":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},"example_response":{"selector":"0x08c379a0","error_type":"Error(string)","reason":"ERC20: insufficient allowance","plain_english":"The transfer was rejected because the spender contract has not been approved to move that many tokens on your behalf. The token contract checks the allowance before moving funds, and yours was too low.","likely_cause":"transferFrom was called for an amount larger than the current allowance from the owner to the caller, or approve was never sent for this spender.","suggested_fix":"Call approve(spender, amount) on 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 for at least the transfer amount and wait for it to confirm, then retry transferFrom.","confidence":"high"}}]}