# Fundsheet by Mintward > Wallet statement and source-of-funds PDF from public blockchain data (Ethereum, Base, Arbitrum, OP Mainnet, Polygon, Bitcoin). For banks, exchanges, mortgage lenders and accountants. Free preview; full PDF 15 USDC. No account, no API key. ## How an agent gets a report 1. Collect the dataset from your own runtime (Blockscout blocks most server IPs; your network is fine). The collector is an ES module with no dependencies, Node 18+ or browsers: `const { collect } = await import("https://fundsheet.mintward.xyz/collector.mjs"); const addresses = await collect(["0x..."], { chains: ["base","ethereum"] });` 2. POST https://fundsheet.mintward.xyz/api/agent/reports with JSON `{"v":1,"currency":"USD","addresses":,"exchangeRows":[],"proofs":[]}` (up to 1000 transfers; for more use POST /api/reports, then POST /api/reports/{id}/check and /build with header x-fs-token). Response: id, token, summary, previewUrl (free, watermarked), x402Url, order (unique USDC amount and payTo for a plain transfer), verifyUrl. 3. Pay and download: GET the x402Url (x402 v2, exact scheme, 15 USDC on Base, eip155:8453). Or send the exact order amount in native USDC on Base/Ethereum/Arbitrum/OP Mainnet/Polygon to the payTo address and poll statusUrl until paid, then GET /api/reports/{id}/report.pdf?t={token}. Ownership proofs (optional): proofs: [{"chain":"evm","address":"0x...","message":"","signature":"0x..."}], signed with EIP-191 personal_sign within the last 30 days. Build the message with `ownershipMessage(address, "YYYY-MM-DD")` exported by https://fundsheet.mintward.xyz/collector.mjs. ## Pages - [Home](https://fundsheet.mintward.xyz/): the web app - [Terms and method](https://fundsheet.mintward.xyz/terms): sources, checks, limits - [Privacy](https://fundsheet.mintward.xyz/privacy) - [Verify a report](https://fundsheet.mintward.xyz/verify): public hash check, GET https://fundsheet.mintward.xyz/api/verify/{id}