{"uid":"cap_mAMM5H2QiF0Sd7ASDk4LM","slug":"touchstone-locomot-io-eip-191-signature-verification-ecrecover-a97e7ba9","name":"touchstone.locomot.io – EIP-191 Signature Verification (ecrecover)","description":"Recover who signed a message (ecrecover, EIP-191 personal_sign). For EIP-712 typed data use POST /verify/sig. Every answer signed.","url":"https://touchstone.locomot.io/verify/sig","method":"GET","headers":{},"bodySchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["input"],"properties":{"input":{"type":"object","required":["type","method"],"properties":{"type":{"type":"string","const":"http"},"method":{"enum":["GET","HEAD","DELETE"],"type":"string"},"queryParams":{"type":"object","required":["signature","message"],"properties":{"type":{"type":"string","description":"eip191"},"message":{"type":"string","description":"signed message (text or 0x-hex)"},"signature":{"type":"string","description":"0x-hex signature"},"expected_signer":{"type":"string","description":"optional address to match against"}}}},"additionalProperties":false},"output":{"type":"object","properties":{"op":{"type":"string"},"digest":{"type":"string"},"scheme":{"type":"string"},"signer":{"type":"string"},"source":{"type":"string"},"matches":{"type":"boolean"},"expected_signer":{"type":"string"}}}}},"responseSchema":null,"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.002","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.002/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.002","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.002","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_pY6hxYzkNNdSe6QbWR1ik","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.002","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 signed a message using ecrecover / EIP-191 personal_sign, optionally validating against an expected signer address.","exampleAgentPrompt":"Can you recover which Ethereum wallet signed this message — 'Hello World' — given the signature 0x4a5f...d3e2? Also check if it matches the expected signer 0xAbCd...1234.","exampleUseCases":[{"title":"Verify Web3 login signature","prompt":"A user just logged in claiming to be wallet 0xDead...Beef. They signed the message 'Login to MyApp at 2024-01-15T10:30:00Z' and provided signature 0x9f3a...c821. Can you recover who actually signed that message and confirm it matches their claimed address?"},{"title":"Audit DAO governance vote","prompt":"We have a governance proposal vote where the voter claims address 0x1234...abcd signed the message 'Vote YES on Proposal #42'. The signature is 0xe7b2...f904. Can you recover the actual signer and verify it matches the expected voter address?"},{"title":"Validate NFT ownership claim","prompt":"Someone is claiming they own this NFT and signed the message 'I own CryptoPunk #7804' with signature 0xa1c5...3d78. Can you do an ecrecover on that and tell me which Ethereum wallet actually signed it?"}],"resultDescription":"Returns a JSON object containing the recovered signer Ethereum address, the message digest, the signature scheme (e.g. eip191), a boolean 'matches' field indicating whether the recovered signer equals the expected_signer (if provided), and the source/op metadata. The response itself is signed by the Touchstone service.","failureModes":["Invalid or malformed signature hex returns an error (cannot ecrecover)","Message format mismatch causes incorrect signer recovery","Missing required 'signature' or 'message' query parameters returns a 400-level error","Expected_signer address format is invalid (non-checksummed or malformed)","Signature produced by a different scheme (e.g. EIP-712) will yield incorrect or unexpected signer — use POST /verify/sig for typed data"],"whenToPreferThis":"Use this endpoint when you need to recover the signing Ethereum address from a standard EIP-191 personal_sign signature (the most common Web3 message signing format). If you are working with EIP-712 typed structured data, use the POST /verify/sig endpoint instead. Prefer this over rolling your own ecrecover logic when you want a deterministic, signed, auditable answer from a neutral third-party service.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-14T00:40:43.979Z","isFirstParty":false}