# Hooks (quick reference)

The authoritative machine-readable catalog is `App\Support\CoreHooks::catalog()`. Prefer the constants so renames are caught by code review and tests.

| Hook | Type | Fires when |
|---|---|---|
| `user.registered` | action | A member registration was committed |
| `question.created` | action | A question was created, including pending questions |
| `question.published` | action | A question became publicly visible |
| `answer.created` | action | An answer was created, including pending answers |
| `answer.published` | action | An answer became publicly visible |
| `answer.accepted` | action | An answer was accepted for a question |
| `comment.created` | action | A question, answer, or topic comment was created |
| `topic.created` | action | A topic was created, including pending topics |
| `topic.published` | action | A topic became publicly visible |
| `topic.updated` | action | A topic changed |
| `topic.comment_created` | action | A published comment was added to a topic |
| `topic.locked` | action | A topic was locked |
| `topic.unlocked` | action | A topic was unlocked |
| `seo.meta` | filter | Filter safe public meta values before rendering |
| `seo.structured_data` | filter | Filter JSON-LD data before rendering |
| `sitemap.entries` | filter | Filter a generated sitemap entry list |
| `spam.assessment` | filter | Adjust a spam assessment after core scoring |
| `widgets.register` | filter | Extend the public widget registry |
| `menu.items` | filter | Filter visible managed menu items |
| `notification.channels` | filter | Extend the notification channel registry |

Narrative guidance, guarantees and payload rules: [Hooks reference](../05-extensions/HOOKS-REFERENCE.md).
