# ProgramWatch > A directory and explorer for Solana programs (smart contracts). Tracks deploy date, last activity, upgradeability, verification status, IDL availability, and update authority for ~57k+ programs on Solana mainnet. ProgramWatch is a free, public, read-only resource. It's intended to be consumable by AI agents and other automated tools — all data is exposed via JSON APIs with permissive CORS. ## License / attribution The API is free to use for any purpose, including commercial. No registration or rate limits. If you find it useful, a credit tweet to @metasal or @programwatch on X is appreciated 🙏 ## Quick links - Site: https://programwatch.dev - Per-program page: https://programwatch.dev/{program_address} - Source: https://github.com/metasal1/programwatch ## API endpoints All endpoints return JSON. CORS is open. No auth required. - `GET /api/database` — paginated, sortable, filterable list of programs. Query params: `page`, `limit`, `query` (search by name or address), `sortBy` (`name|size|slot|deployed|last_activity_at`), `sortOrder` (`asc|desc`), `executable`, `mutable`, `verified`, `idl` (boolean filters), `deployedSince`, `activeSince` (ISO 8601 cutoff timestamps). - `GET /api/program/{address}` — single-program record (full row). - `GET /api/check?address=...` — live on-chain check for a single program (PDA, authority, slot, deploy time). - `GET /api/verification?address=...` — verification status (source-code-to-bytecode match) via verify.osec.io. - `GET /api/stats` — aggregate counts (total / executable / verified / mutable / frozen / has IDL). - `GET /api/deploy` — monthly deploy histogram. - `GET /api/sync-status` — last sync timestamps and counts. - `GET /idl/{address}.json` — IDL file when available (Anchor or Codama format). ## Data model Each program row carries: `program_address`, `program_name`, `program_derived_address` (the BPF Loader Upgradeable PDA), `executable`, `mutable` (= upgradeable), `verified`, `idl`, `deployed` (ISO timestamp), `last_activity_at` (ISO timestamp), `slot`, `size` (KB), `owner` (loader address), `update_authority_address`. ## Common LLM tasks - "Has program X been verified?" → `GET /api/program/{address}` → check `verified`. - "Find Solana DEXes" → `GET /api/database?query=dex&limit=20`. - "Recently deployed programs" → `GET /api/database?sortBy=deployed&sortOrder=desc&limit=20`. - "Most recently active programs" → `GET /api/database?sortBy=last_activity_at&sortOrder=desc&limit=20`. - "Programs deployed this week" → `GET /api/database?deployedSince=`. - "Get IDL for program X" → `GET /idl/{address}.json` (404 if not available; check `idl: true` in the program record first). ## Conventions - Solana program addresses are base58, 32–44 chars: `^[1-9A-HJ-NP-Za-km-z]{32,44}$`. - All timestamps are ISO 8601 in UTC. - Boolean filters in query params take the strings `true` or `false`. - Pagination defaults: `page=1`, `limit=10`, max not enforced. ## Contact - Issues or suggestions: https://t.me/metasalxyz or gm@metasal.xyz