Migrating from OpenZeppelin Defender

OpenZeppelin Defender is shutting down on July 1, 2026. IMAA is a purpose-built migration target for the monitoring and alerting half of Defender (Sentinels, notification channels, and the lighter Autotasks).

🔎 Also: discover contracts by wallet

Sentinels cover the contracts you were already watching. To catch anything you weren't, drop your Safe or deployer address into Contracts → Import from wallet and IMAA discovers every contract it deployed, interacts with, holds tokens in, or has approved.

→ Wallet import walkthrough

Import your Sentinels directly

The fastest path is the built-in Defender importer. Export your Sentinels from Defender as JSON, then go to Contracts → Import from Defender and drop the file in. Each Sentinel becomes an IMAA contract with a tx_rate monitor target and one alert rule per notification channel — and the channels themselves are created for you.

  • Dry-run preview first. The importer shows what it will create, what already exists, and what it will skip — before it writes anything.
  • Unsupported channel types are skipped, not fatal. Channels IMAA doesn't support yet (e.g. Telegram, Opsgenie, Datadog) are reported as skipped with a reason, and the rest of the import continues.
  • Per-request limits by tier: Pro imports up to 25 Sentinels per request, Team and Enterprise up to 100. (Free can't use the importer — it's a paid feature.)

Re-running is safe: a Sentinel that maps to a contract you already monitor is detected and skipped rather than duplicated.

Concept mapping

OZ DefenderIMAA equivalent
SentinelAlert rule (against a monitor target)
Notification ChannelChannel
AutotaskWebhook channel + your own code (Cloud Run, Lambda, Vercel function, whatever)
ContractContract

Key differences to know up front

  • Primary + secondary channels. Like a Defender sentinel, an IMAA alert rule can notify several channels — one primary channel plus up to 20 additional ones, all delivered in parallel. No need to duplicate rules to fan out.
  • Window-based thresholds, not per-event triggers. Defender fires per matching event by default. IMAA evaluates a metric (count, rate, latency) over a rolling window, then compares against a threshold. This eliminates noisy bursts but means you need to translate "notify on every Transfer" into "notify when Transfer count > 0 in a 30-second window" (or similar).
  • No in-platform code execution. IMAA does signed webhooks — you host the logic. This is intentional: it's cheaper, easier to test, and avoids vendor lock-in.
  • Idempotency is built in. Once a rule fires, it's suppressed for the window length. No more wrapping Defender Autotasks in your own dedupe layer.

What you gain with IMAA API keys

Defender API keys are organisation-wide credentials with full permissions. IMAA keys add scoping that Defender never supported:

  • Read-only mode. Mint a key that can query alert history and contracts but can't mutate anything. Useful for analytics warehouses and public status pages.
  • Per-contract restriction. A CI key that deploys monitoring for one product team only gets access to that team's contracts. Compromise blast radius is scoped to what the key was allowed to touch.
  • Per-chain restriction. Automation specific to Base or Solana can be locked to that chain.
  • Optional expiry. Choose never (the default), a one-click 90-day preset, or a custom date. A forgotten Defender key was forever; an expired IMAA key fails closed.
  • Per-key usage visibility. Every key has a 30-day request/error chart. Notice a spike or a silent drop without instrumenting it yourself.

See Managing API Keys for the full UX and Public API for curl examples including scoped-key creation.

Migrating? You can trial the concept by hand-monitoring a contract or two on Free. The accelerators, though, are paid: wallet discovery starts on Starter, while the Defender importer and API keys are Pro and above. The importer is self-serve up to 25 Sentinels per request on Pro and 100 on Team / Enterprise — if your fleet is larger, talk to us about bulk import.