{
  "slug": "modules/webhooks",
  "title": "Webhooks module",
  "description": "Signed outgoing webhook delivery with retries, secret rotation, and delivery history.",
  "url": "https://cuitty.com/docs/modules/webhooks",
  "markdown_url": "https://cuitty.com/docs/modules/webhooks.md",
  "json_url": "https://cuitty.com/docs/modules/webhooks.json",
  "frontmatter": {
    "title": "Webhooks module",
    "description": "Signed outgoing webhook delivery with retries, secret rotation, and delivery history.",
    "order": 12,
    "section": "Modules",
    "updatedAt": "2026-05-07"
  },
  "headings": [
    {
      "depth": 1,
      "slug": "webhooks-module",
      "text": "Webhooks module"
    },
    {
      "depth": 2,
      "slug": "delivery-model",
      "text": "Delivery model"
    },
    {
      "depth": 2,
      "slug": "api",
      "text": "API"
    }
  ],
  "body_markdown": "# Webhooks module\n\nThe webhooks module gives Cuitty modules one shared delivery lane for customer-owned HTTP endpoints, Slack-style integrations, and internal notifications.\n\n## Delivery model\n\n- Endpoints own their signing secret.\n- Deliveries record request and response metadata.\n- Retries are explicit attempts with their own status.\n- Secret rotation keeps old attempts inspectable.\n\n## API\n\n| Endpoint | Returns |\n| --- | --- |\n| `GET /api/webhooks/status` | Module health |\n| `GET /api/webhooks/endpoints?project_id=...` | Endpoint list |\n| `POST /api/webhooks/deliver` | Internal delivery trigger |\n| `POST /api/webhooks/endpoints/{id}/rotate` | Rotate endpoint secret |\n\nProduct page: [Observe modules](/products/observe/modules).",
  "links_out": [
    "/products/observe/modules"
  ]
}