[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"reazon-page-\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fwebhooks":3,"reazon-offering-angebot-leistungen":22,"reazon-offering-angebot-zielgruppen":35,"reazon-angebot-subnav":36,"reazon-mainnav":49,"reazon-footernav":56,"reazon-docs-tree-\u002Fde\u002Fhilfe":115},{"data":4},{"id":5,"path":6,"slug":7,"published_at":8,"page_type":9,"no_index":12,"fields":13,"blocks":21},1204,"\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fwebhooks","webhooks","2026-08-17T13:37:03.793Z",{"identifier":10,"name":11},"docs","Docs \u002F Hilfe",false,{"title":14,"summary":15,"body":16,"body_html":17,"position":18,"meta_title":19,"meta_description":20},"Webhooks","Receive real-time notifications when content changes in Wortfreunde","# Webhooks\n\nWebhooks let you receive real-time HTTP callbacks when events happen in Wortfreunde. Instead of polling the API for changes, your server gets notified automatically.\n\n## Setup\n\nWebhooks are configured in **Wortfreunde Studio** under **Settings** \u002F **Webhooks**. You provide a URL, select which events to subscribe to, and receive a signature key for verifying deliveries.\n\n## Events\n\n| Event | Description |\n|-------|-------------|\n| `post.updated` | A published post's content was updated |\n| `post.publishing_pending` | A post is ready to publish and awaiting confirmation via the API |\n| `post.published` | A post was published |\n| `post.unpublished` | A published post was reverted to draft |\n\n### API Platform Events\n\nThe `post.publishing_pending` and `post.unpublished` events are primarily used with **API platform channels**. When a post on an API platform channel reaches its scheduled time, Wortfreunde sets it to `publishing_pending` and fires the `post.publishing_pending` webhook. Your external system should then:\n\n1. Receive the webhook and process the post content\n2. Call `PATCH \u002Fchannels\u002F{channel_id}\u002Fposts\u002F{id}\u002Fpublish` to confirm publication\n3. Optionally provide `external_id` and `external_url` for tracking\n\nSee [Posts API, API Platform Publishing Workflow](\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fposts#api-platform-publishing-workflow) for the full flow.\n\n## Payload\n\nEvery webhook delivery sends a `POST` request to your URL with a JSON body:\n\n```json\n{\n  \"event\": \"post.updated\",\n  \"timestamp\": \"2026-03-09T15:48:46Z\",\n  \"account\": {\n    \"id\": 3,\n    \"name\": \"Wertstifter GmbH\"\n  },\n  \"data\": {\n    \"post\": {\n      \"id\": 244,\n      \"title\": \"Strukturelle Fokus-Voraussetzungen im Unternehmen\",\n      \"body\": \"Fokus ist keine Frage der Disziplin. Es ist eine Frage der Struktur...\",\n      \"teaser\": null,\n      \"slug\": null,\n      \"publication_status\": \"draft\",\n      \"created_at\": \"2026-03-09T15:48:31.673Z\",\n      \"updated_at\": \"2026-03-09T15:48:46.870Z\",\n      \"published_at\": null,\n      \"meta_title\": null,\n      \"meta_description\": null,\n      \"tags\": [\n        { \"id\": 514, \"name\": \"Positionierung\" },\n        { \"id\": 425, \"name\": \"Leadership\" },\n        { \"id\": 660, \"name\": \"DeepWork\" }\n      ],\n      \"media\": [],\n      \"channel\": {\n        \"id\": 17,\n        \"title\": \"LinkedIn\",\n        \"platform\": \"linkedin\",\n        \"team\": null,\n        \"posts_count\": 6\n      }\n    }\n  }\n}\n```\n\n### Top-Level Fields\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `event` | string | Event type that triggered this delivery |\n| `timestamp` | string | ISO 8601 timestamp of when the event occurred |\n| `account` | object | The account that owns the resource |\n| `account.id` | integer | Account identifier |\n| `account.name` | string | Account display name |\n| `data` | object | Event-specific payload |\n\n### Post Object\n\nThe `data.post` object contains the full post at the time of the event. See the [Posts API](\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fposts) for field descriptions.\n\n## Signature Verification\n\nEvery webhook delivery is signed with HMAC-SHA256 using your signature key. Verify the following headers to ensure authenticity.\n\n### Headers\n\n| Header | Description |\n|--------|-------------|\n| `X-Wortfreunde-Signature` | HMAC-SHA256 signature of the request body |\n| `X-Wortfreunde-Timestamp` | Unix timestamp of signature creation |\n| `X-Wortfreunde-Event` | Event type that triggered this delivery |\n| `X-Wortfreunde-Delivery` | Unique delivery identifier |\n\n### Verification Examples\n\n#### Python\n\n```python\nimport hmac\nimport hashlib\n\ndef verify_webhook(payload_body, signature, timestamp, secret):\n    \"\"\"Verify a Wortfreunde webhook signature.\"\"\"\n    message = f\"{timestamp}.{payload_body}\"\n    expected = hmac.new(\n        secret.encode(),\n        message.encode(),\n        hashlib.sha256\n    ).hexdigest()\n    return hmac.compare_digest(expected, signature)\n```\n\n#### PHP\n\n```php\nfunction verifyWebhook(string $payloadBody, string $signature, string $timestamp, string $secret): bool\n{\n    $message = $timestamp . '.' . $payloadBody;\n    $expected = hash_hmac('sha256', $message, $secret);\n    return hash_equals($expected, $signature);\n}\n```\n\n#### Ruby\n\n```ruby\nrequire 'openssl'\n\ndef verify_webhook(payload_body, signature, timestamp, secret)\n  message = \"#{timestamp}.#{payload_body}\"\n  expected = OpenSSL::HMAC.hexdigest('SHA256', secret, message)\n  Rack::Utils.secure_compare(expected, signature)\nend\n```\n\n> **⚠️ Warnung**\n>\n> Always verify the signature before processing a webhook. Without verification, an attacker could send forged payloads to your endpoint.\n\n### Verification Steps\n\n1. Extract `X-Wortfreunde-Signature` and `X-Wortfreunde-Timestamp` from the request headers\n2. Concatenate the timestamp and raw request body with a `.` separator: `{timestamp}.{body}`\n3. Compute HMAC-SHA256 of the concatenated string using your signature key\n4. Compare the computed signature with the header value using a timing-safe comparison\n\n> **Tipp**\n>\n> Check that `X-Wortfreunde-Timestamp` is within a reasonable window (e.g. 5 minutes) to prevent replay attacks.\n\n## Responding to Webhooks\n\nYour endpoint should return a `2xx` status code within 10 seconds to acknowledge receipt. If the delivery fails, Wortfreunde will retry with exponential backoff.\n\n| Attempt | Delay |\n|---------|-------|\n| 1 | Immediate |\n| 2 | 1 minute |\n| 3 | 5 minutes |\n| 4 | 30 minutes |\n| 5 | 2 hours |\n\nAfter 5 failed attempts, the delivery is marked as failed. You can view delivery history and manually retry from **Settings** \u002F **Webhooks** in Studio.\n\n## Best Practices\n\n- **Respond quickly.** Process the payload asynchronously (e.g. queue it) and return `200` immediately. Don't block on database writes or external API calls.\n- **Verify signatures.** Always validate `X-Wortfreunde-Signature` before trusting the payload.\n- **Handle duplicates.** Use `X-Wortfreunde-Delivery` to deduplicate, the same event may be delivered more than once.\n- **Use HTTPS.** Your webhook URL should use HTTPS to protect the payload in transit.","\u003Ch1>Webhooks\u003C\u002Fh1>\n\n\u003Cp>Webhooks let you receive real-time HTTP callbacks when events happen in Wortfreunde. Instead of polling the API for changes, your server gets notified automatically.\u003C\u002Fp>\n\n\u003Ch2>Setup\u003C\u002Fh2>\n\n\u003Cp>Webhooks are configured in \u003Cstrong>Wortfreunde Studio\u003C\u002Fstrong> under \u003Cstrong>Settings\u003C\u002Fstrong> \u002F \u003Cstrong>Webhooks\u003C\u002Fstrong>. You provide a URL, select which events to subscribe to, and receive a signature key for verifying deliveries.\u003C\u002Fp>\n\n\u003Ch2>Events\u003C\u002Fh2>\n\n\u003Ctable>\u003Cthead>\n\u003Ctr>\n\u003Cth>Event\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>post.updated\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A published post&#39;s content was updated\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>post.publishing_pending\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A post is ready to publish and awaiting confirmation via the API\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>post.published\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A post was published\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>post.unpublished\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A published post was reverted to draft\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Ch3>API Platform Events\u003C\u002Fh3>\n\n\u003Cp>The \u003Ccode>post.publishing_pending\u003C\u002Fcode> and \u003Ccode>post.unpublished\u003C\u002Fcode> events are primarily used with \u003Cstrong>API platform channels\u003C\u002Fstrong>. When a post on an API platform channel reaches its scheduled time, Wortfreunde sets it to \u003Ccode>publishing_pending\u003C\u002Fcode> and fires the \u003Ccode>post.publishing_pending\u003C\u002Fcode> webhook. Your external system should then:\u003C\u002Fp>\n\n\u003Col>\n\u003Cli>Receive the webhook and process the post content\u003C\u002Fli>\n\u003Cli>Call \u003Ccode>PATCH \u002Fchannels\u002F{channel_id}\u002Fposts\u002F{id}\u002Fpublish\u003C\u002Fcode> to confirm publication\u003C\u002Fli>\n\u003Cli>Optionally provide \u003Ccode>external_id\u003C\u002Fcode> and \u003Ccode>external_url\u003C\u002Fcode> for tracking\u003C\u002Fli>\n\u003C\u002Fol>\n\n\u003Cp>See \u003Ca href=\"\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fposts#api-platform-publishing-workflow\">Posts API, API Platform Publishing Workflow\u003C\u002Fa> for the full flow.\u003C\u002Fp>\n\n\u003Ch2>Payload\u003C\u002Fh2>\n\n\u003Cp>Every webhook delivery sends a \u003Ccode>POST\u003C\u002Fcode> request to your URL with a JSON body:\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode class=\"json\">{\n  &quot;event&quot;: &quot;post.updated&quot;,\n  &quot;timestamp&quot;: &quot;2026-03-09T15:48:46Z&quot;,\n  &quot;account&quot;: {\n    &quot;id&quot;: 3,\n    &quot;name&quot;: &quot;Wertstifter GmbH&quot;\n  },\n  &quot;data&quot;: {\n    &quot;post&quot;: {\n      &quot;id&quot;: 244,\n      &quot;title&quot;: &quot;Strukturelle Fokus-Voraussetzungen im Unternehmen&quot;,\n      &quot;body&quot;: &quot;Fokus ist keine Frage der Disziplin. Es ist eine Frage der Struktur...&quot;,\n      &quot;teaser&quot;: null,\n      &quot;slug&quot;: null,\n      &quot;publication_status&quot;: &quot;draft&quot;,\n      &quot;created_at&quot;: &quot;2026-03-09T15:48:31.673Z&quot;,\n      &quot;updated_at&quot;: &quot;2026-03-09T15:48:46.870Z&quot;,\n      &quot;published_at&quot;: null,\n      &quot;meta_title&quot;: null,\n      &quot;meta_description&quot;: null,\n      &quot;tags&quot;: [\n        { &quot;id&quot;: 514, &quot;name&quot;: &quot;Positionierung&quot; },\n        { &quot;id&quot;: 425, &quot;name&quot;: &quot;Leadership&quot; },\n        { &quot;id&quot;: 660, &quot;name&quot;: &quot;DeepWork&quot; }\n      ],\n      &quot;media&quot;: [],\n      &quot;channel&quot;: {\n        &quot;id&quot;: 17,\n        &quot;title&quot;: &quot;LinkedIn&quot;,\n        &quot;platform&quot;: &quot;linkedin&quot;,\n        &quot;team&quot;: null,\n        &quot;posts_count&quot;: 6\n      }\n    }\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Top-Level Fields\u003C\u002Fh3>\n\n\u003Ctable>\u003Cthead>\n\u003Ctr>\n\u003Cth>Field\u003C\u002Fth>\n\u003Cth>Type\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>event\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string\u003C\u002Ftd>\n\u003Ctd>Event type that triggered this delivery\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>timestamp\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string\u003C\u002Ftd>\n\u003Ctd>ISO 8601 timestamp of when the event occurred\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>account\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>object\u003C\u002Ftd>\n\u003Ctd>The account that owns the resource\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>account.id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>Account identifier\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>account.name\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string\u003C\u002Ftd>\n\u003Ctd>Account display name\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>data\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>object\u003C\u002Ftd>\n\u003Ctd>Event-specific payload\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Ch3>Post Object\u003C\u002Fh3>\n\n\u003Cp>The \u003Ccode>data.post\u003C\u002Fcode> object contains the full post at the time of the event. See the \u003Ca href=\"\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fposts\">Posts API\u003C\u002Fa> for field descriptions.\u003C\u002Fp>\n\n\u003Ch2>Signature Verification\u003C\u002Fh2>\n\n\u003Cp>Every webhook delivery is signed with HMAC-SHA256 using your signature key. Verify the following headers to ensure authenticity.\u003C\u002Fp>\n\n\u003Ch3>Headers\u003C\u002Fh3>\n\n\u003Ctable>\u003Cthead>\n\u003Ctr>\n\u003Cth>Header\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>X-Wortfreunde-Signature\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>HMAC-SHA256 signature of the request body\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>X-Wortfreunde-Timestamp\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Unix timestamp of signature creation\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>X-Wortfreunde-Event\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Event type that triggered this delivery\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>X-Wortfreunde-Delivery\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Unique delivery identifier\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Ch3>Verification Examples\u003C\u002Fh3>\n\n\u003Ch4>Python\u003C\u002Fh4>\n\n\u003Cpre>\u003Ccode class=\"python\">import hmac\nimport hashlib\n\ndef verify_webhook(payload_body, signature, timestamp, secret):\n    &quot;&quot;&quot;Verify a Wortfreunde webhook signature.&quot;&quot;&quot;\n    message = f&quot;{timestamp}.{payload_body}&quot;\n    expected = hmac.new(\n        secret.encode(),\n        message.encode(),\n        hashlib.sha256\n    ).hexdigest()\n    return hmac.compare_digest(expected, signature)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch4>PHP\u003C\u002Fh4>\n\n\u003Cpre>\u003Ccode class=\"php\">function verifyWebhook(string $payloadBody, string $signature, string $timestamp, string $secret): bool\n{\n    $message = $timestamp . &#39;.&#39; . $payloadBody;\n    $expected = hash_hmac(&#39;sha256&#39;, $message, $secret);\n    return hash_equals($expected, $signature);\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch4>Ruby\u003C\u002Fh4>\n\n\u003Cpre>\u003Ccode class=\"ruby\">require &#39;openssl&#39;\n\ndef verify_webhook(payload_body, signature, timestamp, secret)\n  message = &quot;#{timestamp}.#{payload_body}&quot;\n  expected = OpenSSL::HMAC.hexdigest(&#39;SHA256&#39;, secret, message)\n  Rack::Utils.secure_compare(expected, signature)\nend\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>⚠️ Warnung\u003C\u002Fstrong>\u003C\u002Fp>\n\n\u003Cp>Always verify the signature before processing a webhook. Without verification, an attacker could send forged payloads to your endpoint.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\u003Ch3>Verification Steps\u003C\u002Fh3>\n\n\u003Col>\n\u003Cli>Extract \u003Ccode>X-Wortfreunde-Signature\u003C\u002Fcode> and \u003Ccode>X-Wortfreunde-Timestamp\u003C\u002Fcode> from the request headers\u003C\u002Fli>\n\u003Cli>Concatenate the timestamp and raw request body with a \u003Ccode>.\u003C\u002Fcode> separator: \u003Ccode>{timestamp}.{body}\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Compute HMAC-SHA256 of the concatenated string using your signature key\u003C\u002Fli>\n\u003Cli>Compare the computed signature with the header value using a timing-safe comparison\u003C\u002Fli>\n\u003C\u002Fol>\n\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>Tipp\u003C\u002Fstrong>\u003C\u002Fp>\n\n\u003Cp>Check that \u003Ccode>X-Wortfreunde-Timestamp\u003C\u002Fcode> is within a reasonable window (e.g. 5 minutes) to prevent replay attacks.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\u003Ch2>Responding to Webhooks\u003C\u002Fh2>\n\n\u003Cp>Your endpoint should return a \u003Ccode>2xx\u003C\u002Fcode> status code within 10 seconds to acknowledge receipt. If the delivery fails, Wortfreunde will retry with exponential backoff.\u003C\u002Fp>\n\n\u003Ctable>\u003Cthead>\n\u003Ctr>\n\u003Cth>Attempt\u003C\u002Fth>\n\u003Cth>Delay\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\n\u003Ctd>1\u003C\u002Ftd>\n\u003Ctd>Immediate\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>2\u003C\u002Ftd>\n\u003Ctd>1 minute\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>3\u003C\u002Ftd>\n\u003Ctd>5 minutes\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>4\u003C\u002Ftd>\n\u003Ctd>30 minutes\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>5\u003C\u002Ftd>\n\u003Ctd>2 hours\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Cp>After 5 failed attempts, the delivery is marked as failed. You can view delivery history and manually retry from \u003Cstrong>Settings\u003C\u002Fstrong> \u002F \u003Cstrong>Webhooks\u003C\u002Fstrong> in Studio.\u003C\u002Fp>\n\n\u003Ch2>Best Practices\u003C\u002Fh2>\n\n\u003Cul>\n\u003Cli>\u003Cstrong>Respond quickly.\u003C\u002Fstrong> Process the payload asynchronously (e.g. queue it) and return \u003Ccode>200\u003C\u002Fcode> immediately. Don&#39;t block on database writes or external API calls.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Verify signatures.\u003C\u002Fstrong> Always validate \u003Ccode>X-Wortfreunde-Signature\u003C\u002Fcode> before trusting the payload.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Handle duplicates.\u003C\u002Fstrong> Use \u003Ccode>X-Wortfreunde-Delivery\u003C\u002Fcode> to deduplicate, the same event may be delivered more than once.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Use HTTPS.\u003C\u002Fstrong> Your webhook URL should use HTTPS to protect the payload in transit.\u003C\u002Fli>\n\u003C\u002Ful>\n",5,"Wortfreunde Webhooks einrichten und prüfen","Webhooks für Änderungen an Wortfreunde Posts einrichten: Ereignisse, Payload, Signaturprüfung, Antworten und Abläufe für API-Plattform-Channels.",[],[23,27,31],{"title":24,"href":25,"description":26},"Wortfreunde Studio","\u002Fde\u002Fstudio","Du erstellst deinen Content selbst, mit einem geführten Prozess: Recherche, Erstellung und Planung in einem System.",{"title":28,"href":29,"description":30},"Wortfreunde Redaktion","\u002Fde\u002Fredaktion","Redaktionelle Ausarbeitung anfragen. Kanäle, Umfang, Rollen und Freigabe werden im individuellen Angebot festgelegt.",{"title":32,"href":33,"description":34},"Wortfreunde Partner","\u002Fde\u002Fpartner","Du betreust Kunden? Pro Kunde eine eigene Strategie, eigene Themen, eigener Plan. Qualität bei Skalierung.",[],[37,40,43,46],{"title":38,"href":39},"Vergleich","\u002Fde\u002Fcontent-erstellen-vergleich",{"title":41,"href":42},"Unser Ansatz","\u002Fde\u002Funser-ansatz-authentische-sichtbarkeit",{"title":44,"href":45},"Über uns","\u002Fde\u002Fueber-die-wortfreunde",{"title":47,"href":48},"Kontakt","\u002Fde\u002Fkontakt",[50,53],{"title":51,"href":52},"Preise","\u002Fde\u002Fpreise",{"title":54,"href":55},"Wissen","\u002Fde\u002Fwissen",[57,66,96],{"title":58,"links":59},"Angebot",[60,61,62,63,64,65],{"title":24,"href":25},{"title":32,"href":33},{"title":51,"href":52},{"title":41,"href":42},{"title":38,"href":39},{"title":44,"href":45},{"title":67,"links":68},"Themen",[69,72,75,78,81,84,87,90,93],{"title":70,"href":71},"Content-Strategie","\u002Fde\u002Fcontent-strategie",{"title":73,"href":74},"Positionierung","\u002Fde\u002Fpositionierung",{"title":76,"href":77},"SEO","\u002Fde\u002Fseo",{"title":79,"href":80},"KI","\u002Fde\u002Fki",{"title":82,"href":83},"Kosten","\u002Fde\u002Fcontent-marketing-kosten",{"title":85,"href":86},"B2B-Vertrieb","\u002Fde\u002Fb2b-vertrieb",{"title":88,"href":89},"LinkedIn","\u002Fde\u002Flinkedin-fuer-unternehmer",{"title":91,"href":92},"Blog","\u002Fde\u002Fblog-fuer-unternehmer",{"title":94,"href":95},"LinkedIn Guide","\u002Fde\u002Flinkedin",{"title":97,"links":98},"Sonstiges",[99,102,105,106,109,112],{"title":100,"href":101},"Hilfe","\u002Fde\u002Fhilfe",{"title":103,"href":104},"Updates","\u002Fde\u002Fupdates",{"title":47,"href":48},{"title":107,"href":108},"Impressum","\u002Fde\u002Fimpressum",{"title":110,"href":111},"Datenschutz","\u002Fde\u002Fdatenschutz",{"title":113,"href":114},"AGB","\u002Fde\u002Fagb",{"root":116,"tree":119},{"path":101,"title":100,"summary":117,"nav_variant":118},"Hier findest du Anleitungen, Erklärungen und alles Wichtige rund um Wortfreunde. Damit du das Beste aus deiner Content-Arbeit herausholst.","nested",[120,180,236],{"path":121,"slug":122,"title":123,"position":124,"children":125},"\u002Fde\u002Fhilfe\u002Fcontent","content","Verwaltung von Inhalten",0,[126,145,162],{"path":127,"slug":128,"title":129,"position":130,"children":131},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fposts","posts","Posts",1,[132,138],{"path":133,"slug":134,"title":135,"summary":136,"position":130,"children":137},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fposts\u002Ffreigaben","freigaben","Freigaben","Beiträge vor der Veröffentlichung zur Prüfung freigeben lassen",[],{"path":139,"slug":140,"title":141,"summary":142,"position":143,"children":144},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fposts\u002Ferster-kommentar","erster-kommentar","Links als Kommentar","Links im Post kosten Reichweite. Der Erste Kommentar ist die bessere Alternative.",2,[],{"path":146,"slug":147,"title":148,"position":143,"children":149},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fmediathek","mediathek","Mediathek",[150,156],{"path":151,"slug":152,"title":153,"summary":154,"position":130,"children":155},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fmediathek\u002Fcanva","canva","Canva Integration","Canva Konto verbinden, Designs durchsuchen und in die Mediathek importieren",[],{"path":157,"slug":158,"title":159,"summary":160,"position":143,"children":161},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fmediathek\u002Fkarussells","karussells","Karussells","Karussell-Posts mit mehreren Folien erstellen, bearbeiten und per Chat optimieren",[],{"path":163,"slug":164,"title":165,"position":166,"children":167},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fteams","teams","Teams",3,[168,174],{"path":169,"slug":170,"title":171,"summary":172,"position":130,"children":173},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fteams\u002Fuebersicht","uebersicht","Übersicht","Mit Teams organisierst du Inhalte nach Kontext, damit unterschiedliche Bereiche unabhängig arbeiten können.",[],{"path":175,"slug":176,"title":177,"summary":178,"position":143,"children":179},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fteams\u002Fteam-erstellen","team-erstellen","Team erstellen","So erstellst du ein neues Team und richtest es ein.",[],{"path":181,"slug":182,"title":183,"position":130,"children":184},"\u002Fde\u002Fhilfe\u002Fautomationen","automationen","Automationen",[185,206],{"path":186,"slug":187,"title":188,"position":124,"children":189},"\u002Fde\u002Fhilfe\u002Fautomationen\u002Fgrundlagen","grundlagen","Grundlagen",[190,194,200],{"path":191,"slug":170,"title":171,"summary":192,"position":124,"children":193},"\u002Fde\u002Fhilfe\u002Fautomationen\u002Fgrundlagen\u002Fuebersicht","Wiederkehrende Content-Aufgaben automatisieren. Social-Media-Posts und Content-Ideen per Knopfdruck oder E-Mail erstellen lassen.",[],{"path":195,"slug":196,"title":197,"summary":198,"position":130,"children":199},"\u002Fde\u002Fhilfe\u002Fautomationen\u002Fgrundlagen\u002Feingabefelder","eingabefelder","Eingabefelder & Platzhalter","Eingabefelder definieren und mit Platzhaltern in Aufgaben verwenden.",[],{"path":201,"slug":202,"title":203,"summary":204,"position":143,"children":205},"\u002Fde\u002Fhilfe\u002Fautomationen\u002Fgrundlagen\u002Fstarten","starten","Starten","Content-Automationen im Browser oder per E-Mail auslösen.",[],{"path":207,"slug":208,"title":209,"position":130,"children":210},"\u002Fde\u002Fhilfe\u002Fautomationen\u002Faufgaben","aufgaben","Aufgaben",[211,217,223,229],{"path":212,"slug":213,"title":214,"summary":215,"position":130,"children":216},"\u002Fde\u002Fhilfe\u002Fautomationen\u002Faufgaben\u002Fpost-erstellen","post-erstellen","Post erstellen","Automatisch einen fertigen Post-Entwurf erstellen lassen, für LinkedIn, Blog oder andere Kanäle.",[],{"path":218,"slug":219,"title":220,"summary":221,"position":143,"children":222},"\u002Fde\u002Fhilfe\u002Fautomationen\u002Faufgaben\u002Fideen-erstellen","ideen-erstellen","Ideen erstellen","Mehrere Content-Ideen für einen bestimmten Kanal erstellen lassen, z.B. für LinkedIn oder Blog.",[],{"path":224,"slug":225,"title":226,"summary":227,"position":166,"children":228},"\u002Fde\u002Fhilfe\u002Fautomationen\u002Faufgaben\u002Fideen-automatisch-erstellen","ideen-automatisch-erstellen","Ideen automatisch erstellen","Content-Ideen erstellen lassen, die automatisch den passenden Kanälen und Strategieelementen zugeordnet werden.",[],{"path":230,"slug":231,"title":232,"summary":233,"position":234,"children":235},"\u002Fde\u002Fhilfe\u002Fautomationen\u002Faufgaben\u002Femail-zusammenfassung","email-zusammenfassung","E-Mail-Zusammenfassung","Ergebnisse einer Content-Automation per E-Mail an den Absender zurückschicken.",4,[],{"path":237,"slug":238,"title":239,"summary":240,"position":143,"children":241},"\u002Fde\u002Fhilfe\u002Fapi","api","Integration mit anderen Systemen","Anbindung an deine Tools, technische Referenz und Single Sign-On",[242,266,296],{"path":243,"slug":244,"title":245,"summary":246,"position":130,"children":247},"\u002Fde\u002Fhilfe\u002Fapi\u002Fgetting-started","getting-started","Getting Started","Learn the basics of using the Wortfreunde API",[248,254,260],{"path":249,"slug":250,"title":251,"summary":252,"position":124,"children":253},"\u002Fde\u002Fhilfe\u002Fapi\u002Fgetting-started\u002Foverview","overview","Overview","Complete API documentation for Wortfreunde services",[],{"path":255,"slug":256,"title":257,"summary":258,"position":143,"children":259},"\u002Fde\u002Fhilfe\u002Fapi\u002Fgetting-started\u002Fauthentication","authentication","Authentication","How to authenticate with the Wortfreunde API",[],{"path":261,"slug":262,"title":263,"summary":264,"position":166,"children":265},"\u002Fde\u002Fhilfe\u002Fapi\u002Fgetting-started\u002Fquick-start","quick-start","Quick Start","Make your first Wortfreunde API calls in minutes",[],{"path":267,"slug":268,"title":269,"summary":270,"position":143,"children":271},"\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference","api-reference","API Reference","Detailed documentation of all API endpoints",[272,278,284,290,294],{"path":273,"slug":274,"title":275,"summary":276,"position":130,"children":277},"\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fendpoints","endpoints","Endpoints","Complete reference of all Wortfreunde API endpoints",[],{"path":279,"slug":280,"title":281,"summary":282,"position":143,"children":283},"\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fusers","users","Users","API endpoints for user management",[],{"path":285,"slug":286,"title":287,"summary":288,"position":166,"children":289},"\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fchannels","channels","Channels","API endpoints for listing and retrieving channels",[],{"path":291,"slug":128,"title":129,"summary":292,"position":234,"children":293},"\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fposts","API endpoints for listing and retrieving posts within a channel",[],{"path":6,"slug":7,"title":14,"summary":15,"position":18,"children":295},[],{"path":297,"slug":298,"title":299,"summary":300,"position":166,"children":301},"\u002Fde\u002Fhilfe\u002Fapi\u002Fsso","sso","Single Sign On","Single Sign-On integration for external systems",[302,308],{"path":303,"slug":304,"title":305,"summary":306,"position":130,"children":307},"\u002Fde\u002Fhilfe\u002Fapi\u002Fsso\u002Fget-access-tokens","get-access-tokens","Get Access Tokens","Create one-time SSO login tokens to authenticate users from external systems",[],{"path":309,"slug":310,"title":311,"summary":312,"position":143,"children":313},"\u002Fde\u002Fhilfe\u002Fapi\u002Fsso\u002Fchromeless-mode","chromeless-mode","Chromeless Mode","Embed Studio pages without navigation, ideal for intranets, SharePoint or external portals",[]]