{"uid":"cap_2KbEvAwsemSE9i7x0tLak","slug":"onesource-proxy-pattern-detector-fa9e0bd9","name":"OneSource Proxy Pattern Detector","description":"Detect upgradeable proxy patterns (EIP-1967, UUPS, Transparent) via eth_getStorageAt - returns the implementation address behind a proxy","url":"https://api.onesource.io/api/chain/proxy/:address","method":"GET","headers":{},"bodySchema":null,"responseSchema":null,"example":{"request":{"address":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","network":"ethereum"},"response":{"data":{"address":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","is_proxy":true,"proxy_type":"slot0","is_contract":true,"implementation":"0xfcb19e6a322b27c06842a71e8c725399f049ae3a"},"meta":{"endpoint":"/api/chain/proxy/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","request_id":"aad9e54d66803c16"}}},"exampleRequest":{"address":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","network":"ethereum"},"tags":["x402"],"displayCostAmount":"0.005","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"settled","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.005/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.005","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.005","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm__Pe1JUVK6l_fuWqsw7Rl-","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.005","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Detects upgradeable proxy patterns (EIP-1967, UUPS, Transparent) on Ethereum contracts and returns the underlying implementation address","exampleAgentPrompt":"Is 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 a proxy contract on Ethereum mainnet, and if so what's the implementation address behind it?","exampleUseCases":[{"title":"Smart contract security audit verification","prompt":"I need to verify whether the USDC token contract at 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 is using an upgradeable proxy pattern, and if it is, can you show me which implementation address it's actually delegating to?"},{"title":"Identify hidden logic in DeFi protocols","prompt":"We're analyzing a DeFi lending protocol and want to know if their main contract at 0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9 is a proxy—if so, what's the real implementation contract we should be reviewing for vulnerabilities?"},{"title":"Resolve proxy contracts for direct interaction","prompt":"I'm trying to interact with the actual logic of an upgradeable smart contract but keep hitting the proxy facade. Can you detect if this address is a UUPS or transparent proxy and give me the underlying implementation contract I should target instead?"}],"resultDescription":"Returns the implementation address that the proxy contract delegates to, along with the detected proxy pattern type (EIP-1967, UUPS, or Transparent), derived from reading the appropriate storage slots via eth_getStorageAt.","failureModes":["Address is not a proxy contract — returns null or empty implementation address","Invalid address format (not 0x + 40 hex chars) — 400 validation error","Unsupported network specified — enum validation error","Contract does not use a recognized proxy pattern (EIP-1967/UUPS/Transparent) — no implementation found","RPC node unavailable — 5xx error","Insufficient payment / x402 payment not processed — 402 Payment Required"],"whenToPreferThis":"Use this endpoint when you need to determine whether a given Ethereum contract address is an upgradeable proxy and want to find the actual implementation contract behind it. Ideal for smart contract auditing, security analysis, or when you need to interact with the true logic contract rather than the proxy facade. Prefer this over generic RPC calls when you want structured proxy pattern detection without manually reading storage slots.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-14T18:48:25.741Z","isFirstParty":false}