{"uid":"cap_yoQV7o245BBNU-AmlhtBC","slug":"safe-authority-fingerprint-check-bb3c986e","name":"Safe Authority Fingerprint Check","description":"Cheap poll: has the spending authority over this Safe changed since you last looked? You pass the fingerprint this route gave you last time; it recomputes the current one and compares. Call it with no fingerprint to get a baseline. The fingerprint covers owners, threshold, guard, moduleGuard, the singleton implementation, and the whole module graph including the owners and threshold of modules that are themselves Safes -- a change one level down flips it, which a flat owner list would miss. It deliberately excludes the nonce, so ordinary transactions do not read as an authority change. Nothing is stored on our side: you hold the baseline, so there is no account and no subscription. No archive reads either, which is why this is cheap; when it reports changed, buy GET /safe-signer-drift for what changed and in which block. A truncated walk returns indeterminate, never unchanged. Required: chain_id and address. Optional: fingerprint.","url":"https://api402x.com/safe-authority-check","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":["chain_id","address"],"properties":{"address":{"type":"string","description":"REQUIRED. Safe address on that chain."},"chain_id":{"type":"string","description":"REQUIRED. Numeric chain id, e.g. 1 or 8453."},"fingerprint":{"type":"string","description":"OPTIONAL. The value this route returned last time. Omit to get a baseline."}}}},"additionalProperties":false},"output":{"type":"object","required":["type"],"properties":{"type":{"type":"string"},"example":{"type":"object","required":["chain_id","address","status","checked_at"],"properties":{"covers":{"type":["object","null"]},"detail":{"type":["string","null"]},"status":{"enum":["baseline","unchanged","changed","indeterminate"],"type":"string"},"address":{"type":"string"},"chain_id":{"type":"integer"},"presented":{"type":["string","null"]},"checked_at":{"type":"string","format":"date-time"},"fingerprint":{"type":["string","null"]}},"additionalProperties":false}}}}},"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_zQSJ4liEgv8Rh90ESesut","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":"Cheaply polls whether the spending authority of a Gnosis Safe has changed by comparing a stored fingerprint against the current on-chain state.","exampleAgentPrompt":"Has the spending authority on my Safe at 0xABC123... on Ethereum mainnet (chain 1) changed since I last checked? Here's the fingerprint from last time: 0xdef456...","exampleUseCases":[{"title":"Baseline fingerprint for new Safe","prompt":"I just set up a Safe at 0x1234abcd... on Base (chain 8453) and want to establish a baseline authority fingerprint so I can poll for changes going forward — no previous fingerprint to compare yet."},{"title":"Agent alerting on multisig tampering","prompt":"Poll the Safe at 0xdeadbeef... on Ethereum (chain 1) against this fingerprint I saved yesterday: 0xaabbcc... — has anyone changed the owners, threshold, or modules since then?"},{"title":"Monitoring nested Safe module authority","prompt":"Check if the spending authority on 0x9988ff... on Arbitrum (chain 42161) has changed since my last check — I'm especially worried about nested Safe modules being reconfigured, and my previous fingerprint is 0x112233..."}],"resultDescription":"Returns a JSON object with a status field ('baseline', 'unchanged', 'changed', or 'indeterminate'), the current fingerprint hash, the timestamp of the check, and optional detail and covers fields describing what the fingerprint encompasses. If status is 'changed', the agent should follow up with GET /safe-signer-drift to get what changed and in which block. 'Indeterminate' means the module graph walk was truncated and the result is inconclusive.","failureModes":["Missing required chain_id or address returns an error","Invalid or unrecognized chain_id may fail to resolve","Safe address not found on specified chain returns an error","Truncated module graph walk returns 'indeterminate' status — not an error but inconclusive","Supplied fingerprint malformed or unrecognized — likely treated as baseline mismatch","Network or RPC issues may cause failures fetching live chain state"],"whenToPreferThis":"Choose this endpoint when you need a cheap, stateless poll to detect authority changes on a Gnosis Safe without storing any state server-side or reading archive nodes. It is ideal for periodic agent monitoring loops where you hold the baseline fingerprint and only want to trigger deeper investigation (via /safe-signer-drift) when a change is actually detected. Prefer it over full Safe reads when you only need a yes/no change signal. It is not appropriate if you need to know what changed or when — use /safe-signer-drift for that.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-14T18:30:42.175Z","isFirstParty":false}