# Safe Authority Fingerprint Check

> Safe Authority Fingerprint Check is a paid API for AI agents from api402x.com, paid per call via x402, $0.002/call, status unknown (last checked 2026-09-14).

Cheaply polls whether the spending authority of a Gnosis Safe has changed by comparing a stored fingerprint against the current on-chain state.

## Facts

- Endpoint: GET https://api402x.com/safe-authority-check
- Price: $0.002/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/safe-authority-fingerprint-check-bb3c986e
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_yoQV7o245BBNU-AmlhtBC

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability safe-authority-fingerprint-check-bb3c986e
```

Example prompt: 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...

## When to prefer this

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.

## Known failure modes

- 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

## How this service works

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.

## Output

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.

## Request schema (JSON Schema)

```json
{
 "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
    }
   }
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/safe-authority-fingerprint-check-bb3c986e/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api402x.com](https://www.zero.xyz/host/api402x.com/llms.txt)
