{"uid":"cap_-2k4UqQqO4dI55rQhdc2C","slug":"tereno-contract-change-monitor-de8f09d6","name":"Tereno Contract Change Monitor","description":"Monitor a Base contract and get the diff, not another scan. Every call compares the address against Tereno's previous observation and names what actually moved: a proxy implementation swap, an admin change, new bytecode, a contract that just got paused. Unchanged is an answer too, and every answer carries the block it stops being valid at, so a bot knows when to look again. $0.02 when nobody has watched this address yet, $0.01 once another agent has.","url":"https://www.tereno.xyz/api/v1/capabilities/contract.change/invoke","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"],"type":"string"},"queryParams":{"type":"object","required":["address"],"properties":{"quote":{"type":"string","description":"Optional single-use quote id."},"address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"Base contract address to compare with its previous Tereno observation."}},"additionalProperties":false}},"additionalProperties":false},"output":{"type":"object","required":["type"],"properties":{"type":{"type":"string"},"example":{"type":"object","required":["capabilityId","invocationId","verdict","result","pricing","receiptUrl"],"properties":{"result":{"type":"object","required":["changed","baselineCreated","changes","current","validUntilBlock"],"properties":{"changed":{"type":"boolean"},"changes":{"type":"array"},"current":{"type":"object"},"baselineCreated":{"type":"boolean"},"validUntilBlock":{"type":"integer"}}},"pricing":{"type":"object"},"verdict":{"enum":["allow","review","block"]},"nextCall":{"type":["object","null"]},"receiptUrl":{"type":"string"},"capabilityId":{"const":"contract.change"},"invocationId":{"type":"string"}}}}}}},"responseSchema":null,"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.02","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.02/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.02","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.02","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_pSqTP3iq5iUlRmKNukwvL","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.02","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Detects whether a Base smart contract has changed since Tereno last observed it, flagging proxy upgrades, admin takeovers, bytecode swaps, or newly paused states.","exampleAgentPrompt":"Has the Base contract at 0x1234567890abcdef1234567890abcdef12345678 changed since Tereno last checked it — any proxy upgrades, admin changes, or bytecode swaps?","exampleUseCases":null,"resultDescription":"Returns a boolean 'changed' flag, a list of specific detected changes (e.g. proxy upgrade, admin takeover, bytecode swap, pause), the current contract state snapshot, whether this call created a new baseline, the block number until which the result is valid, and an allow/review/block verdict with pricing and receipt URL.","failureModes":["Invalid or non-checksummed contract address returns a 400-level error","Contract address has no deployed code (EOA or undeployed), resulting in an error or empty baseline","No previous Tereno observation exists — baseline is created on first call, so 'changed' is always false on first invocation","Stale or expired quote ID causes payment failure","Network congestion on Base may delay block state resolution","Payment not included or insufficient USDC causes 402 rejection"],"whenToPreferThis":"Use this endpoint when you need to verify that a specific Base smart contract has not been silently modified since a prior audit or observation — especially for detecting post-audit rug-pull patterns like proxy upgrades, admin takeovers, bytecode swaps, or newly paused contracts. Prefer this over generic block explorers or static analysis tools when you need a diff against a known-good historical baseline rather than a one-time snapshot, and when you want a machine-readable verdict (allow/review/block) suitable for automated decision-making.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-15T06:45:17.015Z","isFirstParty":false}