{"title":"Webhooks API","slug":"webhooks","category":"api","summary":"Реєстрація HTTP-зворотних викликів для подій пам'яті, чату та завдань — отримуйте сповіщення при зміні даних.","audience":["human","llm"],"tags":["api","webhooks","automation","events"],"difficulty":"intermediate","updated":"2026-06-27","word_count":193,"read_minutes":1,"llm_context":"Auth: Mind Key\nRegister: POST /webhooks { url, events, secret? }\nList: GET /webhooks\nGet: GET /webhooks/:id\nUpdate: PUT /webhooks/:id { url?, events?, secret?, enabled? }\nDelete: DELETE /webhooks/:id\nEvents: memory.*, memory.store, memory.update, memory.delete, chat.*, chat.message_received, task.*, task.created, task.completed\nSecret: HMAC-SHA256 signed payload, sent in X-Synapse-Signature header\nPattern: register webhook → receive POST → process event → call Synapse API\n","lang":"uk","translated":true,"requested_lang":"uk","content_markdown":"\n# Webhooks API\n\nWebhooks дозволяють отримувати HTTP-зворотні виклики, коли в Synapse відбуваються\nподії. Ідеально підходить для запуску зовнішньої автоматизації, надсилання\nсповіщень або синхронізації з іншими системами.\n\n## Кінцеві точки\n\n### POST /webhooks\n\nЗареєструвати новий webhook.\n\n```bash\ncurl -X POST https://synapse.schaefer.zone/webhooks \\\n  -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://my-app.com/webhook\",\n    \"events\": \"memory.*\",\n    \"secret\": \"my-hmac-secret-min-8-chars\"\n  }'\n```\n\nВідповідь:\n\n```json\n{\n  \"id\": \"wh_001\",\n  \"url\": \"https://my-app.com/webhook\",\n  \"events\": [\"memory.*\"],\n  \"enabled\": true,\n  \"created_at\": \"2026-06-27T...\"\n}\n```\n\n### GET /webhooks\n\nСписок усіх webhook-ів для поточного mind-у.\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     https://synapse.schaefer.zone/webhooks\n```\n\n### GET /webhooks/:id\n\nОтримати один webhook.\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     https://synapse.schaefer.zone/webhooks/wh_001\n```\n\n### PUT /webhooks/:id\n\nОновити webhook (URL, події, секрет або прапорець enabled).\n\n```bash\ncurl -X PUT https://synapse.schaefer.zone/webhooks/wh_001 \\\n  -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"enabled\": false}'\n```\n\n### DELETE /webhooks/:id\n\nВидалити webhook.\n\n```bash\ncurl -X DELETE -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     https://synapse.schaefer.zone/webhooks/wh_001\n```\n\n## Типи подій\n\n| Шаблон | Спрацьовує коли |\n|---------|------------|\n| `memory.*` | Будь-яка подія пам'яті |\n| `memory.store` | Збережено новий спогад |\n| `memory.update` | Спогад оновлено |\n| `memory.delete` | Спогад видалено |\n| `chat.*` | Будь-яка подія чату |\n| `chat.message_received` | Нове повідомлення від людини |\n| `task.*` | Будь-яка подія завдання |\n| `task.created` | Створено нове завдання |\n| `task.completed` | Завдання позначено як виконане |\n| `*` | Усі події |\n\n## Корисне навантаження webhook\n\nКоли подія спрацьовує, Synapse надсилає POST на ваш URL:\n\n```json\n{\n  \"event\": \"memory.store\",\n  \"timestamp\": \"2026-06-27T...\",\n  \"mind_id\": \"m_xyz789\",\n  \"data\": {\n    \"id\": \"mem_001\",\n    \"category\": \"fact\",\n    \"key\": \"user_name\",\n    \"content\": \"Michael Schäfer\"\n  }\n}\n```\n\n## Перевірка підпису\n\nЯкщо ви встановили `secret`, Synapse підписує кожне корисне навантаження через HMAC-SHA256:\n\n```\nX-Synapse-Signature: sha256=<hex-hmac>\n```\n\nПеревірка у вашому обробнику:\n\n```python\nimport hmac, hashlib\n\ndef verify_signature(payload_body: bytes, signature: str, secret: str) -> bool:\n    expected = hmac.new(\n        secret.encode(),\n        payload_body,\n        hashlib.sha256\n    ).hexdigest()\n    return hmac.compare_digest(f\"sha256={expected}\", signature)\n```\n\n## Шаблон: синхронізація в реальному часі\n\n```python\n# Ваш обробник webhook\n@app.post(\"/webhook\")\nasync def handle_webhook(request):\n    body = await request.body()\n    signature = request.headers.get(\"X-Synapse-Signature\", \"\")\n    if not verify_signature(body, signature, WEBHOOK_SECRET):\n        return 401\n\n    event = json.loads(body)\n    if event[\"event\"] == \"memory.store\":\n        # Синхронізація з іншою системою\n        sync_to_external(event[\"data\"])\n    elif event[\"event\"] == \"chat.message_received\":\n        # Запуск пробудження агента\n        notify_agent(event[\"data\"])\n```\n\n## Наступні кроки\n\n- [Cron та планувальник](/docs/api/cron)\n- [Посібник з автоматизації webhook-ів](/docs/guides/webhook-automation)\n","content_html":"<h1>Webhooks API</h1>\n<p>Webhooks дозволяють отримувати HTTP-зворотні виклики, коли в Synapse відбуваються\nподії. Ідеально підходить для запуску зовнішньої автоматизації, надсилання\nсповіщень або синхронізації з іншими системами.</p>\n<h2>Кінцеві точки</h2>\n<h3>POST /webhooks</h3>\n<p>Зареєструвати новий webhook.</p>\n<pre><code class=\"hljs language-bash\">curl -X POST https://synapse.schaefer.zone/webhooks \\\n  -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n  -H <span class=\"hljs-string\">&quot;Content-Type: application/json&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{\n    &quot;url&quot;: &quot;https://my-app.com/webhook&quot;,\n    &quot;events&quot;: &quot;memory.*&quot;,\n    &quot;secret&quot;: &quot;my-hmac-secret-min-8-chars&quot;\n  }&#x27;</span></code></pre><p>Відповідь:</p>\n<pre><code class=\"hljs language-json\"><span class=\"hljs-punctuation\">{</span>\n  <span class=\"hljs-attr\">&quot;id&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;wh_001&quot;</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">&quot;url&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;https://my-app.com/webhook&quot;</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">&quot;events&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">[</span><span class=\"hljs-string\">&quot;memory.*&quot;</span><span class=\"hljs-punctuation\">]</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">&quot;enabled&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-literal\"><span class=\"hljs-keyword\">true</span></span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">&quot;created_at&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;2026-06-27T...&quot;</span>\n<span class=\"hljs-punctuation\">}</span></code></pre><h3>GET /webhooks</h3>\n<p>Список усіх webhook-ів для поточного mind-у.</p>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     https://synapse.schaefer.zone/webhooks</code></pre><h3>GET /webhooks/:id</h3>\n<p>Отримати один webhook.</p>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     https://synapse.schaefer.zone/webhooks/wh_001</code></pre><h3>PUT /webhooks/:id</h3>\n<p>Оновити webhook (URL, події, секрет або прапорець enabled).</p>\n<pre><code class=\"hljs language-bash\">curl -X PUT https://synapse.schaefer.zone/webhooks/wh_001 \\\n  -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n  -H <span class=\"hljs-string\">&quot;Content-Type: application/json&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;enabled&quot;: false}&#x27;</span></code></pre><h3>DELETE /webhooks/:id</h3>\n<p>Видалити webhook.</p>\n<pre><code class=\"hljs language-bash\">curl -X DELETE -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     https://synapse.schaefer.zone/webhooks/wh_001</code></pre><h2>Типи подій</h2>\n<table>\n<thead>\n<tr>\n<th>Шаблон</th>\n<th>Спрацьовує коли</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>memory.*</code></td>\n<td>Будь-яка подія пам&#39;яті</td>\n</tr>\n<tr>\n<td><code>memory.store</code></td>\n<td>Збережено новий спогад</td>\n</tr>\n<tr>\n<td><code>memory.update</code></td>\n<td>Спогад оновлено</td>\n</tr>\n<tr>\n<td><code>memory.delete</code></td>\n<td>Спогад видалено</td>\n</tr>\n<tr>\n<td><code>chat.*</code></td>\n<td>Будь-яка подія чату</td>\n</tr>\n<tr>\n<td><code>chat.message_received</code></td>\n<td>Нове повідомлення від людини</td>\n</tr>\n<tr>\n<td><code>task.*</code></td>\n<td>Будь-яка подія завдання</td>\n</tr>\n<tr>\n<td><code>task.created</code></td>\n<td>Створено нове завдання</td>\n</tr>\n<tr>\n<td><code>task.completed</code></td>\n<td>Завдання позначено як виконане</td>\n</tr>\n<tr>\n<td><code>*</code></td>\n<td>Усі події</td>\n</tr>\n</tbody></table>\n<h2>Корисне навантаження webhook</h2>\n<p>Коли подія спрацьовує, Synapse надсилає POST на ваш URL:</p>\n<pre><code class=\"hljs language-json\"><span class=\"hljs-punctuation\">{</span>\n  <span class=\"hljs-attr\">&quot;event&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;memory.store&quot;</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">&quot;timestamp&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;2026-06-27T...&quot;</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">&quot;mind_id&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;m_xyz789&quot;</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">&quot;data&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">{</span>\n    <span class=\"hljs-attr\">&quot;id&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;mem_001&quot;</span><span class=\"hljs-punctuation\">,</span>\n    <span class=\"hljs-attr\">&quot;category&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;fact&quot;</span><span class=\"hljs-punctuation\">,</span>\n    <span class=\"hljs-attr\">&quot;key&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;user_name&quot;</span><span class=\"hljs-punctuation\">,</span>\n    <span class=\"hljs-attr\">&quot;content&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;Michael Schäfer&quot;</span>\n  <span class=\"hljs-punctuation\">}</span>\n<span class=\"hljs-punctuation\">}</span></code></pre><h2>Перевірка підпису</h2>\n<p>Якщо ви встановили <code>secret</code>, Synapse підписує кожне корисне навантаження через HMAC-SHA256:</p>\n<pre><code class=\"hljs language-plaintext\">X-Synapse-Signature: sha256=&lt;hex-hmac&gt;</code></pre><p>Перевірка у вашому обробнику:</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">import</span> hmac, hashlib\n\n<span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">verify_signature</span>(<span class=\"hljs-params\">payload_body: <span class=\"hljs-built_in\">bytes</span>, signature: <span class=\"hljs-built_in\">str</span>, secret: <span class=\"hljs-built_in\">str</span></span>) -&gt; <span class=\"hljs-built_in\">bool</span>:\n    expected = hmac.new(\n        secret.encode(),\n        payload_body,\n        hashlib.sha256\n    ).hexdigest()\n    <span class=\"hljs-keyword\">return</span> hmac.compare_digest(<span class=\"hljs-string\">f&quot;sha256=<span class=\"hljs-subst\">{expected}</span>&quot;</span>, signature)</code></pre><h2>Шаблон: синхронізація в реальному часі</h2>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-comment\"># Ваш обробник webhook</span>\n<span class=\"hljs-meta\">@app.post(<span class=\"hljs-params\"><span class=\"hljs-string\">&quot;/webhook&quot;</span></span>)</span>\n<span class=\"hljs-keyword\">async</span> <span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">handle_webhook</span>(<span class=\"hljs-params\">request</span>):\n    body = <span class=\"hljs-keyword\">await</span> request.body()\n    signature = request.headers.get(<span class=\"hljs-string\">&quot;X-Synapse-Signature&quot;</span>, <span class=\"hljs-string\">&quot;&quot;</span>)\n    <span class=\"hljs-keyword\">if</span> <span class=\"hljs-keyword\">not</span> verify_signature(body, signature, WEBHOOK_SECRET):\n        <span class=\"hljs-keyword\">return</span> <span class=\"hljs-number\">401</span>\n\n    event = json.loads(body)\n    <span class=\"hljs-keyword\">if</span> event[<span class=\"hljs-string\">&quot;event&quot;</span>] == <span class=\"hljs-string\">&quot;memory.store&quot;</span>:\n        <span class=\"hljs-comment\"># Синхронізація з іншою системою</span>\n        sync_to_external(event[<span class=\"hljs-string\">&quot;data&quot;</span>])\n    <span class=\"hljs-keyword\">elif</span> event[<span class=\"hljs-string\">&quot;event&quot;</span>] == <span class=\"hljs-string\">&quot;chat.message_received&quot;</span>:\n        <span class=\"hljs-comment\"># Запуск пробудження агента</span>\n        notify_agent(event[<span class=\"hljs-string\">&quot;data&quot;</span>])</code></pre><h2>Наступні кроки</h2>\n<ul>\n<li><a href=\"/docs/api/cron\">Cron та планувальник</a></li>\n<li><a href=\"/docs/guides/webhook-automation\">Посібник з автоматизації webhook-ів</a></li>\n</ul>\n","urls":{"html":"/docs/api/webhooks","text":"/docs/api/webhooks?format=text","json":"/docs/api/webhooks?format=json","llm":"/docs/api/webhooks?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}