{"uid":"cap_iLaJItg1M72PtOB7sFygh","slug":"verify-wallet-signature-eip-191-personal-sign-8e02257c","name":"Verify Wallet Signature (EIP-191 / personal_sign)","description":"60 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.","url":"https://flat-rate-llm.kikoribera03.workers.dev/v1/util/verify-signature","method":"POST","headers":{},"bodySchema":{"type":"object","required":["message","signature"],"properties":{"message":{"type":"string","description":"The exact message that was signed."},"expected":{"type":"string","description":"Optional address to compare the recovered signer against."},"signature":{"type":"string","description":"65-byte 0x signature from personal_sign."}}},"responseSchema":{"type":"object","properties":{"signer":{"type":"string"},"matches":{"type":"boolean"}}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.0025","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.0025/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.0025","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.0025","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_h8IMxBnGatlL9VfNWM1Bn","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.0025","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Recovers the Ethereum address that produced a personal_sign (EIP-191) signature and checks whether it matches an expected address, proving wallet ownership.","exampleAgentPrompt":"Check if the Ethereum address 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 actually signed the message 'Sign in to MyApp: nonce=abc123' — the signature is 0x4a1b2c...deadbeef. Does it match?","exampleUseCases":[{"title":"Web3 login authentication flow","prompt":"A user just submitted a wallet sign-in request claiming they own 0xABCd...1234. They signed the message 'Login to MyDapp nonce=8f3a' and gave me signature 0x5f2e...cafe. Can you verify that signature recovers to their claimed address so I can log them in?"},{"title":"NFT allowlist proof verification","prompt":"Someone is claiming a spot on our NFT allowlist. They signed 'allowlist:round1' with their wallet and provided signature 0x9b3c...77aa. The address on the allowlist is 0x1111...aaaa — can you confirm the signature was actually made by that address?"},{"title":"Off-chain governance vote validation","prompt":"We received a governance vote from wallet 0xDeAd...BEef with message 'vote:proposal-42:yes' and signature 0xaabb...ccdd. Before we count the vote, can you recover the signer from that signature and check it matches the registered voter address?"}],"resultDescription":"Returns a JSON object with 'signer' (the recovered Ethereum address that produced the signature) and 'matches' (a boolean indicating whether the recovered signer equals the expected address you provided). If no expected address is given, only the recovered signer is returned.","failureModes":["Invalid or malformed signature (not 65 bytes, bad hex encoding) returns an error","Message mismatch — if the message passed differs from what was actually signed, the recovered address will be wrong but no error is thrown","Missing required fields (message or signature) return a validation error","Signature produced by a method other than personal_sign (e.g. signTypedData) will recover an incorrect address","Network or worker timeout on high load"],"whenToPreferThis":"Choose this endpoint when you need to cryptographically verify an EIP-191 (personal_sign) Ethereum wallet signature — especially for Web3 login flows, off-chain authorization proofs, or allowlist checks. It is purpose-built for standard personal_sign signatures and returns both the recovered address and a match boolean in one call, avoiding the need to run ecrecover logic yourself. Not suitable for EIP-712 typed-data signatures or smart-contract wallet (ERC-1271) verification.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-13T13:03:33.044Z","isFirstParty":false}