{
  "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: [Webhooks](/product/modules/webhooks).",
  "body_html": "<h1 id=\"webhooks-module\">Webhooks module</h1>\n<p>The webhooks module gives Cuitty modules one shared delivery lane for customer-owned HTTP endpoints, Slack-style integrations, and internal notifications.</p>\n<h2 id=\"delivery-model\">Delivery model</h2>\n<ul>\n<li>Endpoints own their signing secret.</li>\n<li>Deliveries record request and response metadata.</li>\n<li>Retries are explicit attempts with their own status.</li>\n<li>Secret rotation keeps old attempts inspectable.</li>\n</ul>\n<h2 id=\"api\">API</h2>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<table><thead><tr><th>Endpoint</th><th>Returns</th></tr></thead><tbody><tr><td><code>GET /api/webhooks/status</code></td><td>Module health</td></tr><tr><td><code>GET /api/webhooks/endpoints?project_id=...</code></td><td>Endpoint list</td></tr><tr><td><code>POST /api/webhooks/deliver</code></td><td>Internal delivery trigger</td></tr><tr><td><code>POST /api/webhooks/endpoints/{id}/rotate</code></td><td>Rotate endpoint secret</td></tr></tbody></table>\n<p>Product page: <a href=\"/product/modules/webhooks\">Webhooks</a>.</p>",
  "links_out": [
    "/product/modules/webhooks"
  ]
}