[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"reazon-page-\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fposts":3,"reazon-offering-angebot-leistungen":22,"reazon-offering-angebot-zielgruppen":35,"reazon-angebot-subnav":36,"reazon-mainnav":49,"reazon-docs-tree-\u002Fde\u002Fhilfe":56,"reazon-footernav":257},{"data":4},{"id":5,"path":6,"slug":7,"published_at":8,"page_type":9,"no_index":12,"fields":13,"blocks":21},1202,"\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fposts","posts","2026-08-17T13:37:03.749Z",{"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},"Posts","API endpoints for listing and retrieving posts within a channel","# Posts API\n\nPosts are the content items within a channel, blog articles, LinkedIn posts, newsletter editions, etc. Posts are always accessed through their parent channel.\n\n## Endpoints\n\n| Method | Endpoint | Scope | Description |\n|--------|----------|-------|-------------|\n| GET | `\u002Fchannels\u002F{channel_id}\u002Fposts` | `read:posts` | List posts in a channel |\n| GET | `\u002Fchannels\u002F{channel_id}\u002Fposts\u002F{id}` | `read:posts` | Get a single post |\n| PATCH | `\u002Fchannels\u002F{channel_id}\u002Fposts\u002F{id}\u002Fpublish` | `write:posts` | Confirm publication of a pending post |\n| PATCH | `\u002Fchannels\u002F{channel_id}\u002Fposts\u002F{id}\u002Funpublish` | `write:posts` | Revert a published post to draft |\n\n## List Posts\n\nRetrieve a paginated list of posts for a given channel.\n\n```http\nGET \u002Fchannels\u002F{channel_id}\u002Fposts\n```\n\n### Path Parameters\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `channel_id` | integer | Channel ID |\n\n### Query Parameters\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `page` | integer | 1 | Page number |\n| `per_page` | integer | 20 | Items per page (max: 100) |\n| `limit` | integer | - | Shorthand for `per_page` |\n\n### Example Request\n\n```bash\ncurl -s \"https:\u002F\u002Fapi.wortfreunde.ch\u002Fv1\u002Fchannels\u002F161\u002Fposts?limit=2\" \\\n  -H \"Authorization: Bearer $WORTFREUNDE_API_KEY\" | python3 -m json.tool\n```\n\n### Response\n\n```json\n{\n  \"data\": [\n    {\n      \"id\": 214,\n      \"title\": \"Warum strukturierte Content-Planung mehr bringt als spontane Posts\",\n      \"teaser\": \"Montagmorgen. Der Cursor blinkt. Was soll ich heute posten?...\",\n      \"slug\": \"strukturierte-content-planung-vs-spontane-posts\",\n      \"publication_status\": \"published\",\n      \"created_at\": \"2026-03-02T16:54:36.465Z\",\n      \"updated_at\": \"2026-03-09T05:00:48.275Z\",\n      \"channel\": {\n        \"id\": 161,\n        \"title\": \"Blog\",\n        \"platform\": \"git\",\n        \"team\": {\n          \"id\": 42,\n          \"name\": \"Wortfreunde\"\n        },\n        \"posts_count\": 3\n      }\n    },\n    {\n      \"id\": 208,\n      \"title\": \"Content-Produktion effizient gestalten: 7 Strategien fuer Fuehrungskraefte\",\n      \"teaser\": \"Viele Fuehrungskraefte verbringen Stunden mit Posts, ohne Ergebnis...\",\n      \"slug\": \"content-produktion-effizient-gestalten-strategien-fuer-fuehrungskraefte\",\n      \"publication_status\": \"published\",\n      \"created_at\": \"2026-02-28T10:03:19.931Z\",\n      \"updated_at\": \"2026-02-28T10:08:20.763Z\",\n      \"channel\": {\n        \"id\": 161,\n        \"title\": \"Blog\",\n        \"platform\": \"git\",\n        \"team\": {\n          \"id\": 42,\n          \"name\": \"Wortfreunde\"\n        },\n        \"posts_count\": 3\n      }\n    }\n  ],\n  \"meta\": {\n    \"page\": 1,\n    \"pages\": 1,\n    \"count\": 3,\n    \"per_page\": 20\n  }\n}\n```\n\n### Response Fields\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `id` | integer | Unique post identifier |\n| `title` | string | Post title |\n| `teaser` | string | Short summary \u002F excerpt |\n| `slug` | string | URL-safe identifier |\n| `publication_status` | string | Status (see below) |\n| `created_at` | string | ISO 8601 creation timestamp |\n| `updated_at` | string | ISO 8601 last update timestamp |\n| `channel` | object | The channel this post belongs to |\n\n### Publication Status\n\n| Status | Description |\n|--------|-------------|\n| `draft` | Not yet published |\n| `publishing_pending` | Scheduled and awaiting external confirmation (API platform only) |\n| `published` | Live and visible |\n| `scheduled` | Scheduled for future publication |\n\n### Pagination\n\nThe `meta` object contains pagination details:\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `page` | integer | Current page number |\n| `pages` | integer | Total number of pages |\n| `count` | integer | Total number of posts in this channel |\n| `per_page` | integer | Items per page |\n\n## Get Post\n\nRetrieve a single post with its full content.\n\n```http\nGET \u002Fchannels\u002F{channel_id}\u002Fposts\u002F{id}\n```\n\n### Path Parameters\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `channel_id` | integer | Channel ID |\n| `id` | integer | Post ID |\n\n### Example Request\n\n```bash\ncurl -s https:\u002F\u002Fapi.wortfreunde.ch\u002Fv1\u002Fchannels\u002F161\u002Fposts\u002F214 \\\n  -H \"Authorization: Bearer $WORTFREUNDE_API_KEY\" | python3 -m json.tool\n```\n\n### Response\n\n```json\n{\n  \"data\": {\n    \"id\": 214,\n    \"title\": \"Warum strukturierte Content-Planung mehr bringt als spontane Posts\",\n    \"body\": \"## Struktur\\n\\nDas Problem ist nicht fehlende Kreativitaet...\",\n    \"teaser\": \"Montagmorgen. Der Cursor blinkt. Was soll ich heute posten?...\",\n    \"slug\": \"strukturierte-content-planung-vs-spontane-posts\",\n    \"publication_status\": \"published\",\n    \"created_at\": \"2026-03-02T16:54:36.465Z\",\n    \"updated_at\": \"2026-03-09T05:00:48.275Z\",\n    \"published_at\": \"2026-03-09T05:00:48.269Z\",\n    \"channel\": {\n      \"id\": 161,\n      \"title\": \"Blog\",\n      \"platform\": \"git\",\n      \"team\": {\n        \"id\": 42,\n        \"name\": \"Wortfreunde\"\n      },\n      \"posts_count\": 3\n    },\n    \"tags\": [],\n    \"media\": [],\n    \"meta_title\": \"Strukturierte Content-Planung vs. spontane Posts\",\n    \"meta_description\": \"Erfahre, warum strukturierte Content-Planung mehr Sichtbarkeit und Resonanz bringt als spontane Posts.\"\n  }\n}\n```\n\n### Response Fields\n\nThe single post response includes all fields from the list response, plus:\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `body` | string | Full post content in Markdown |\n| `published_at` | string \\| null | ISO 8601 publication timestamp |\n| `tags` | array | List of tag objects |\n| `media` | array | List of attached media objects |\n| `meta_title` | string \\| null | SEO title override |\n| `meta_description` | string \\| null | SEO description override |\n| `external_id` | string \\| null | External system identifier (API platform only) |\n| `external_url` | string \\| null | URL where the post was published externally (API platform only) |\n\n> **Info**\n>\n> The `body` field contains the full Markdown content of the post. In the list endpoint, `body` is omitted to keep responses lightweight, use the `teaser` for previews.\n\n## Error Responses\n\n### Post Not Found\n\n```bash\ncurl -s https:\u002F\u002Fapi.wortfreunde.ch\u002Fv1\u002Fchannels\u002F161\u002Fposts\u002F99999 \\\n  -H \"Authorization: Bearer $WORTFREUNDE_API_KEY\"\n```\n\n```json\n{\n  \"error\": {\n    \"code\": \"not_found\",\n    \"message\": \"Post not found\"\n  }\n}\n```\n\n| Status | Description |\n|--------|-------------|\n| 401 | Invalid or missing API key |\n| 403 | Insufficient scopes, requires `read:posts` or `write:posts` |\n| 404 | Channel or post not found |\n| 422 | Validation error (wrong status, wrong platform) |\n| 429 | Rate limit exceeded |\n\n---\n\n## Publish Post\n\nConfirms publication of a post that is in `publishing_pending` status. This endpoint is used by external systems to complete the publishing workflow for API platform channels.\n\n```http\nPATCH \u002Fchannels\u002F{channel_id}\u002Fposts\u002F{id}\u002Fpublish\n```\n\n### Scope\n\nRequires `write:posts`.\n\n### Path Parameters\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `channel_id` | integer | Channel ID (must be API platform) |\n| `id` | integer | Post ID |\n\n### Request Body (optional)\n\n```json\n{\n  \"post\": {\n    \"external_id\": \"ext-12345\",\n    \"external_url\": \"https:\u002F\u002Fexample.com\u002Fposts\u002F12345\"\n  }\n}\n```\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `post.external_id` | string | Optional external system identifier for the published post |\n| `post.external_url` | string | Optional URL where the post was published externally |\n\nThe `post` wrapper is optional, if omitted, no external fields are set.\n\n### Example Request\n\n```bash\ncurl -s -X PATCH \"https:\u002F\u002Fapi.wortfreunde.ch\u002Fv1\u002Fchannels\u002F42\u002Fposts\u002F214\u002Fpublish\" \\\n  -H \"Authorization: Bearer $WORTFREUNDE_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"post\": {\"external_id\": \"wp-789\", \"external_url\": \"https:\u002F\u002Fblog.example.com\u002Fmy-post\"}}' \\\n  | python3 -m json.tool\n```\n\n### Response\n\nReturns the updated post with `publication_status: \"published\"`:\n\n```json\n{\n  \"data\": {\n    \"id\": 214,\n    \"title\": \"My API Platform Post\",\n    \"publication_status\": \"published\",\n    \"published_at\": \"2026-03-10T14:30:00.000Z\",\n    \"external_id\": \"wp-789\",\n    \"external_url\": \"https:\u002F\u002Fblog.example.com\u002Fmy-post\",\n    \"channel\": {\n      \"id\": 42,\n      \"title\": \"External Blog\",\n      \"platform\": \"api\"\n    }\n  }\n}\n```\n\n### Error Responses\n\n| Code | Error Code | Description |\n|------|------------|-------------|\n| 403 | - | Token lacks `write:posts` scope |\n| 404 | `not_found` | Channel or post not found |\n| 422 | `only_api_platform` | Channel is not an API platform channel |\n| 422 | `invalid_status` | Post is not in `publishing_pending` status |\n| 422 | `no_publication` | No API publication record exists for the post |\n\n---\n\n## Unpublish Post\n\nReverts a published API platform post back to draft status.\n\n```http\nPATCH \u002Fchannels\u002F{channel_id}\u002Fposts\u002F{id}\u002Funpublish\n```\n\n### Scope\n\nRequires `write:posts`.\n\n### Path Parameters\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `channel_id` | integer | Channel ID (must be API platform) |\n| `id` | integer | Post ID |\n\n### Example Request\n\n```bash\ncurl -s -X PATCH \"https:\u002F\u002Fapi.wortfreunde.ch\u002Fv1\u002Fchannels\u002F42\u002Fposts\u002F214\u002Funpublish\" \\\n  -H \"Authorization: Bearer $WORTFREUNDE_API_KEY\" \\\n  | python3 -m json.tool\n```\n\n### Response\n\nReturns the updated post with `publication_status: \"draft\"`:\n\n```json\n{\n  \"data\": {\n    \"id\": 214,\n    \"title\": \"My API Platform Post\",\n    \"publication_status\": \"draft\",\n    \"published_at\": null,\n    \"external_id\": null,\n    \"external_url\": null,\n    \"channel\": {\n      \"id\": 42,\n      \"title\": \"External Blog\",\n      \"platform\": \"api\"\n    }\n  }\n}\n```\n\n### Error Responses\n\n| Code | Error Code | Description |\n|------|------------|-------------|\n| 403 | - | Token lacks `write:posts` scope |\n| 404 | `not_found` | Channel or post not found |\n| 422 | `only_api_platform` | Channel is not an API platform channel |\n| 422 | `invalid_status` | Post is not in `published` status |\n| 422 | `no_publication` | No API publication record exists for the post |\n\n---\n\n## API Platform Publishing Workflow\n\nThe API platform provides an async publishing workflow for external systems:\n\n1. **Schedule**, A post on an API platform channel is scheduled via the content plan\n2. **Dispatch**, At the scheduled time, Wortfreunde sets the post to `publishing_pending` and fires a `post.publishing_pending` webhook\n3. **Publish**, The external system receives the webhook, processes the post, and calls `PATCH ...\u002Fpublish` to confirm\n4. **Update**, If the post content changes after publishing, a `post.updated` webhook is fired so the external system can re-sync\n5. **Unpublish**, To revert, the external system calls `PATCH ...\u002Funpublish`, which fires a `post.unpublished` webhook\n\n> **Info**\n>\n> Unlike LinkedIn and Git platform channels (which publish directly), API platform posts remain editable even after publishing. Content changes do not automatically revert the publication status, instead, a `post.updated` webhook notifies the external system.","\u003Ch1>Posts API\u003C\u002Fh1>\n\n\u003Cp>Posts are the content items within a channel, blog articles, LinkedIn posts, newsletter editions, etc. Posts are always accessed through their parent channel.\u003C\u002Fp>\n\n\u003Ch2>Endpoints\u003C\u002Fh2>\n\n\u003Ctable>\u003Cthead>\n\u003Ctr>\n\u003Cth>Method\u003C\u002Fth>\n\u003Cth>Endpoint\u003C\u002Fth>\n\u003Cth>Scope\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\n\u003Ctd>GET\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fchannels\u002F{channel_id}\u002Fposts\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>read:posts\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>List posts in a channel\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>GET\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fchannels\u002F{channel_id}\u002Fposts\u002F{id}\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>read:posts\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Get a single post\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>PATCH\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fchannels\u002F{channel_id}\u002Fposts\u002F{id}\u002Fpublish\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>write:posts\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Confirm publication of a pending post\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>PATCH\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fchannels\u002F{channel_id}\u002Fposts\u002F{id}\u002Funpublish\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>write:posts\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Revert a published post to draft\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Ch2>List Posts\u003C\u002Fh2>\n\n\u003Cp>Retrieve a paginated list of posts for a given channel.\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode class=\"http\">GET \u002Fchannels\u002F{channel_id}\u002Fposts\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Path Parameters\u003C\u002Fh3>\n\n\u003Ctable>\u003Cthead>\n\u003Ctr>\n\u003Cth>Parameter\u003C\u002Fth>\n\u003Cth>Type\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>channel_id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>Channel ID\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Ch3>Query Parameters\u003C\u002Fh3>\n\n\u003Ctable>\u003Cthead>\n\u003Ctr>\n\u003Cth>Parameter\u003C\u002Fth>\n\u003Cth>Type\u003C\u002Fth>\n\u003Cth>Default\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>page\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>1\u003C\u002Ftd>\n\u003Ctd>Page number\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>per_page\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>20\u003C\u002Ftd>\n\u003Ctd>Items per page (max: 100)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>limit\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>-\u003C\u002Ftd>\n\u003Ctd>Shorthand for \u003Ccode>per_page\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Ch3>Example Request\u003C\u002Fh3>\n\n\u003Cpre>\u003Ccode class=\"bash\">curl -s &quot;https:\u002F\u002Fapi.wortfreunde.ch\u002Fv1\u002Fchannels\u002F161\u002Fposts?limit=2&quot; \\\n  -H &quot;Authorization: Bearer $WORTFREUNDE_API_KEY&quot; | python3 -m json.tool\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Response\u003C\u002Fh3>\n\n\u003Cpre>\u003Ccode class=\"json\">{\n  &quot;data&quot;: [\n    {\n      &quot;id&quot;: 214,\n      &quot;title&quot;: &quot;Warum strukturierte Content-Planung mehr bringt als spontane Posts&quot;,\n      &quot;teaser&quot;: &quot;Montagmorgen. Der Cursor blinkt. Was soll ich heute posten?...&quot;,\n      &quot;slug&quot;: &quot;strukturierte-content-planung-vs-spontane-posts&quot;,\n      &quot;publication_status&quot;: &quot;published&quot;,\n      &quot;created_at&quot;: &quot;2026-03-02T16:54:36.465Z&quot;,\n      &quot;updated_at&quot;: &quot;2026-03-09T05:00:48.275Z&quot;,\n      &quot;channel&quot;: {\n        &quot;id&quot;: 161,\n        &quot;title&quot;: &quot;Blog&quot;,\n        &quot;platform&quot;: &quot;git&quot;,\n        &quot;team&quot;: {\n          &quot;id&quot;: 42,\n          &quot;name&quot;: &quot;Wortfreunde&quot;\n        },\n        &quot;posts_count&quot;: 3\n      }\n    },\n    {\n      &quot;id&quot;: 208,\n      &quot;title&quot;: &quot;Content-Produktion effizient gestalten: 7 Strategien fuer Fuehrungskraefte&quot;,\n      &quot;teaser&quot;: &quot;Viele Fuehrungskraefte verbringen Stunden mit Posts, ohne Ergebnis...&quot;,\n      &quot;slug&quot;: &quot;content-produktion-effizient-gestalten-strategien-fuer-fuehrungskraefte&quot;,\n      &quot;publication_status&quot;: &quot;published&quot;,\n      &quot;created_at&quot;: &quot;2026-02-28T10:03:19.931Z&quot;,\n      &quot;updated_at&quot;: &quot;2026-02-28T10:08:20.763Z&quot;,\n      &quot;channel&quot;: {\n        &quot;id&quot;: 161,\n        &quot;title&quot;: &quot;Blog&quot;,\n        &quot;platform&quot;: &quot;git&quot;,\n        &quot;team&quot;: {\n          &quot;id&quot;: 42,\n          &quot;name&quot;: &quot;Wortfreunde&quot;\n        },\n        &quot;posts_count&quot;: 3\n      }\n    }\n  ],\n  &quot;meta&quot;: {\n    &quot;page&quot;: 1,\n    &quot;pages&quot;: 1,\n    &quot;count&quot;: 3,\n    &quot;per_page&quot;: 20\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Response 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>id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>Unique post identifier\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>title\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string\u003C\u002Ftd>\n\u003Ctd>Post title\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>teaser\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string\u003C\u002Ftd>\n\u003Ctd>Short summary \u002F excerpt\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>slug\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string\u003C\u002Ftd>\n\u003Ctd>URL-safe identifier\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>publication_status\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string\u003C\u002Ftd>\n\u003Ctd>Status (see below)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>created_at\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string\u003C\u002Ftd>\n\u003Ctd>ISO 8601 creation timestamp\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>updated_at\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string\u003C\u002Ftd>\n\u003Ctd>ISO 8601 last update timestamp\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>channel\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>object\u003C\u002Ftd>\n\u003Ctd>The channel this post belongs to\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Ch3>Publication Status\u003C\u002Fh3>\n\n\u003Ctable>\u003Cthead>\n\u003Ctr>\n\u003Cth>Status\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>draft\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Not yet published\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>publishing_pending\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Scheduled and awaiting external confirmation (API platform only)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>published\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Live and visible\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>scheduled\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Scheduled for future publication\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Ch3>Pagination\u003C\u002Fh3>\n\n\u003Cp>The \u003Ccode>meta\u003C\u002Fcode> object contains pagination details:\u003C\u002Fp>\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>page\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>Current page number\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pages\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>Total number of pages\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>count\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>Total number of posts in this channel\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>per_page\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>Items per page\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Ch2>Get Post\u003C\u002Fh2>\n\n\u003Cp>Retrieve a single post with its full content.\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode class=\"http\">GET \u002Fchannels\u002F{channel_id}\u002Fposts\u002F{id}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Path Parameters\u003C\u002Fh3>\n\n\u003Ctable>\u003Cthead>\n\u003Ctr>\n\u003Cth>Parameter\u003C\u002Fth>\n\u003Cth>Type\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>channel_id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>Channel ID\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>Post ID\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Ch3>Example Request\u003C\u002Fh3>\n\n\u003Cpre>\u003Ccode class=\"bash\">curl -s https:\u002F\u002Fapi.wortfreunde.ch\u002Fv1\u002Fchannels\u002F161\u002Fposts\u002F214 \\\n  -H &quot;Authorization: Bearer $WORTFREUNDE_API_KEY&quot; | python3 -m json.tool\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Response\u003C\u002Fh3>\n\n\u003Cpre>\u003Ccode class=\"json\">{\n  &quot;data&quot;: {\n    &quot;id&quot;: 214,\n    &quot;title&quot;: &quot;Warum strukturierte Content-Planung mehr bringt als spontane Posts&quot;,\n    &quot;body&quot;: &quot;## Struktur\\n\\nDas Problem ist nicht fehlende Kreativitaet...&quot;,\n    &quot;teaser&quot;: &quot;Montagmorgen. Der Cursor blinkt. Was soll ich heute posten?...&quot;,\n    &quot;slug&quot;: &quot;strukturierte-content-planung-vs-spontane-posts&quot;,\n    &quot;publication_status&quot;: &quot;published&quot;,\n    &quot;created_at&quot;: &quot;2026-03-02T16:54:36.465Z&quot;,\n    &quot;updated_at&quot;: &quot;2026-03-09T05:00:48.275Z&quot;,\n    &quot;published_at&quot;: &quot;2026-03-09T05:00:48.269Z&quot;,\n    &quot;channel&quot;: {\n      &quot;id&quot;: 161,\n      &quot;title&quot;: &quot;Blog&quot;,\n      &quot;platform&quot;: &quot;git&quot;,\n      &quot;team&quot;: {\n        &quot;id&quot;: 42,\n        &quot;name&quot;: &quot;Wortfreunde&quot;\n      },\n      &quot;posts_count&quot;: 3\n    },\n    &quot;tags&quot;: [],\n    &quot;media&quot;: [],\n    &quot;meta_title&quot;: &quot;Strukturierte Content-Planung vs. spontane Posts&quot;,\n    &quot;meta_description&quot;: &quot;Erfahre, warum strukturierte Content-Planung mehr Sichtbarkeit und Resonanz bringt als spontane Posts.&quot;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Response Fields\u003C\u002Fh3>\n\n\u003Cp>The single post response includes all fields from the list response, plus:\u003C\u002Fp>\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>body\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string\u003C\u002Ftd>\n\u003Ctd>Full post content in Markdown\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>published_at\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string \\\u003C\u002Ftd>\n\u003Ctd>null\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>tags\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>array\u003C\u002Ftd>\n\u003Ctd>List of tag objects\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>media\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>array\u003C\u002Ftd>\n\u003Ctd>List of attached media objects\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>meta_title\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string \\\u003C\u002Ftd>\n\u003Ctd>null\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>meta_description\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string \\\u003C\u002Ftd>\n\u003Ctd>null\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>external_id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string \\\u003C\u002Ftd>\n\u003Ctd>null\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>external_url\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string \\\u003C\u002Ftd>\n\u003Ctd>null\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>Info\u003C\u002Fstrong>\u003C\u002Fp>\n\n\u003Cp>The \u003Ccode>body\u003C\u002Fcode> field contains the full Markdown content of the post. In the list endpoint, \u003Ccode>body\u003C\u002Fcode> is omitted to keep responses lightweight, use the \u003Ccode>teaser\u003C\u002Fcode> for previews.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\u003Ch2>Error Responses\u003C\u002Fh2>\n\n\u003Ch3>Post Not Found\u003C\u002Fh3>\n\n\u003Cpre>\u003Ccode class=\"bash\">curl -s https:\u002F\u002Fapi.wortfreunde.ch\u002Fv1\u002Fchannels\u002F161\u002Fposts\u002F99999 \\\n  -H &quot;Authorization: Bearer $WORTFREUNDE_API_KEY&quot;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Cpre>\u003Ccode class=\"json\">{\n  &quot;error&quot;: {\n    &quot;code&quot;: &quot;not_found&quot;,\n    &quot;message&quot;: &quot;Post not found&quot;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ctable>\u003Cthead>\n\u003Ctr>\n\u003Cth>Status\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\n\u003Ctd>401\u003C\u002Ftd>\n\u003Ctd>Invalid or missing API key\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>403\u003C\u002Ftd>\n\u003Ctd>Insufficient scopes, requires \u003Ccode>read:posts\u003C\u002Fcode> or \u003Ccode>write:posts\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>404\u003C\u002Ftd>\n\u003Ctd>Channel or post not found\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>422\u003C\u002Ftd>\n\u003Ctd>Validation error (wrong status, wrong platform)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>429\u003C\u002Ftd>\n\u003Ctd>Rate limit exceeded\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Chr>\n\n\u003Ch2>Publish Post\u003C\u002Fh2>\n\n\u003Cp>Confirms publication of a post that is in \u003Ccode>publishing_pending\u003C\u002Fcode> status. This endpoint is used by external systems to complete the publishing workflow for API platform channels.\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode class=\"http\">PATCH \u002Fchannels\u002F{channel_id}\u002Fposts\u002F{id}\u002Fpublish\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Scope\u003C\u002Fh3>\n\n\u003Cp>Requires \u003Ccode>write:posts\u003C\u002Fcode>.\u003C\u002Fp>\n\n\u003Ch3>Path Parameters\u003C\u002Fh3>\n\n\u003Ctable>\u003Cthead>\n\u003Ctr>\n\u003Cth>Parameter\u003C\u002Fth>\n\u003Cth>Type\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>channel_id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>Channel ID (must be API platform)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>Post ID\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Ch3>Request Body (optional)\u003C\u002Fh3>\n\n\u003Cpre>\u003Ccode class=\"json\">{\n  &quot;post&quot;: {\n    &quot;external_id&quot;: &quot;ext-12345&quot;,\n    &quot;external_url&quot;: &quot;https:\u002F\u002Fexample.com\u002Fposts\u002F12345&quot;\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\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>post.external_id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string\u003C\u002Ftd>\n\u003Ctd>Optional external system identifier for the published post\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>post.external_url\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>string\u003C\u002Ftd>\n\u003Ctd>Optional URL where the post was published externally\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Cp>The \u003Ccode>post\u003C\u002Fcode> wrapper is optional, if omitted, no external fields are set.\u003C\u002Fp>\n\n\u003Ch3>Example Request\u003C\u002Fh3>\n\n\u003Cpre>\u003Ccode class=\"bash\">curl -s -X PATCH &quot;https:\u002F\u002Fapi.wortfreunde.ch\u002Fv1\u002Fchannels\u002F42\u002Fposts\u002F214\u002Fpublish&quot; \\\n  -H &quot;Authorization: Bearer $WORTFREUNDE_API_KEY&quot; \\\n  -H &quot;Content-Type: application\u002Fjson&quot; \\\n  -d &#39;{&quot;post&quot;: {&quot;external_id&quot;: &quot;wp-789&quot;, &quot;external_url&quot;: &quot;https:\u002F\u002Fblog.example.com\u002Fmy-post&quot;}}&#39; \\\n  | python3 -m json.tool\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Response\u003C\u002Fh3>\n\n\u003Cp>Returns the updated post with \u003Ccode>publication_status: &quot;published&quot;\u003C\u002Fcode>:\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode class=\"json\">{\n  &quot;data&quot;: {\n    &quot;id&quot;: 214,\n    &quot;title&quot;: &quot;My API Platform Post&quot;,\n    &quot;publication_status&quot;: &quot;published&quot;,\n    &quot;published_at&quot;: &quot;2026-03-10T14:30:00.000Z&quot;,\n    &quot;external_id&quot;: &quot;wp-789&quot;,\n    &quot;external_url&quot;: &quot;https:\u002F\u002Fblog.example.com\u002Fmy-post&quot;,\n    &quot;channel&quot;: {\n      &quot;id&quot;: 42,\n      &quot;title&quot;: &quot;External Blog&quot;,\n      &quot;platform&quot;: &quot;api&quot;\n    }\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Error Responses\u003C\u002Fh3>\n\n\u003Ctable>\u003Cthead>\n\u003Ctr>\n\u003Cth>Code\u003C\u002Fth>\n\u003Cth>Error Code\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\n\u003Ctd>403\u003C\u002Ftd>\n\u003Ctd>-\u003C\u002Ftd>\n\u003Ctd>Token lacks \u003Ccode>write:posts\u003C\u002Fcode> scope\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>404\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>not_found\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Channel or post not found\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>422\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>only_api_platform\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Channel is not an API platform channel\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>422\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>invalid_status\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Post is not in \u003Ccode>publishing_pending\u003C\u002Fcode> status\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>422\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>no_publication\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>No API publication record exists for the post\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Chr>\n\n\u003Ch2>Unpublish Post\u003C\u002Fh2>\n\n\u003Cp>Reverts a published API platform post back to draft status.\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode class=\"http\">PATCH \u002Fchannels\u002F{channel_id}\u002Fposts\u002F{id}\u002Funpublish\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Scope\u003C\u002Fh3>\n\n\u003Cp>Requires \u003Ccode>write:posts\u003C\u002Fcode>.\u003C\u002Fp>\n\n\u003Ch3>Path Parameters\u003C\u002Fh3>\n\n\u003Ctable>\u003Cthead>\n\u003Ctr>\n\u003Cth>Parameter\u003C\u002Fth>\n\u003Cth>Type\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>channel_id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>Channel ID (must be API platform)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>integer\u003C\u002Ftd>\n\u003Ctd>Post ID\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Ch3>Example Request\u003C\u002Fh3>\n\n\u003Cpre>\u003Ccode class=\"bash\">curl -s -X PATCH &quot;https:\u002F\u002Fapi.wortfreunde.ch\u002Fv1\u002Fchannels\u002F42\u002Fposts\u002F214\u002Funpublish&quot; \\\n  -H &quot;Authorization: Bearer $WORTFREUNDE_API_KEY&quot; \\\n  | python3 -m json.tool\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Response\u003C\u002Fh3>\n\n\u003Cp>Returns the updated post with \u003Ccode>publication_status: &quot;draft&quot;\u003C\u002Fcode>:\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode class=\"json\">{\n  &quot;data&quot;: {\n    &quot;id&quot;: 214,\n    &quot;title&quot;: &quot;My API Platform Post&quot;,\n    &quot;publication_status&quot;: &quot;draft&quot;,\n    &quot;published_at&quot;: null,\n    &quot;external_id&quot;: null,\n    &quot;external_url&quot;: null,\n    &quot;channel&quot;: {\n      &quot;id&quot;: 42,\n      &quot;title&quot;: &quot;External Blog&quot;,\n      &quot;platform&quot;: &quot;api&quot;\n    }\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch3>Error Responses\u003C\u002Fh3>\n\n\u003Ctable>\u003Cthead>\n\u003Ctr>\n\u003Cth>Code\u003C\u002Fth>\n\u003Cth>Error Code\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\n\u003Ctd>403\u003C\u002Ftd>\n\u003Ctd>-\u003C\u002Ftd>\n\u003Ctd>Token lacks \u003Ccode>write:posts\u003C\u002Fcode> scope\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>404\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>not_found\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Channel or post not found\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>422\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>only_api_platform\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Channel is not an API platform channel\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>422\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>invalid_status\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Post is not in \u003Ccode>published\u003C\u002Fcode> status\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>422\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>no_publication\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>No API publication record exists for the post\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\n\u003Chr>\n\n\u003Ch2>API Platform Publishing Workflow\u003C\u002Fh2>\n\n\u003Cp>The API platform provides an async publishing workflow for external systems:\u003C\u002Fp>\n\n\u003Col>\n\u003Cli>\u003Cstrong>Schedule\u003C\u002Fstrong>, A post on an API platform channel is scheduled via the content plan\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Dispatch\u003C\u002Fstrong>, At the scheduled time, Wortfreunde sets the post to \u003Ccode>publishing_pending\u003C\u002Fcode> and fires a \u003Ccode>post.publishing_pending\u003C\u002Fcode> webhook\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Publish\u003C\u002Fstrong>, The external system receives the webhook, processes the post, and calls \u003Ccode>PATCH ...\u002Fpublish\u003C\u002Fcode> to confirm\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Update\u003C\u002Fstrong>, If the post content changes after publishing, a \u003Ccode>post.updated\u003C\u002Fcode> webhook is fired so the external system can re-sync\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Unpublish\u003C\u002Fstrong>, To revert, the external system calls \u003Ccode>PATCH ...\u002Funpublish\u003C\u002Fcode>, which fires a \u003Ccode>post.unpublished\u003C\u002Fcode> webhook\u003C\u002Fli>\n\u003C\u002Fol>\n\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>Info\u003C\u002Fstrong>\u003C\u002Fp>\n\n\u003Cp>Unlike LinkedIn and Git platform channels (which publish directly), API platform posts remain editable even after publishing. Content changes do not automatically revert the publication status, instead, a \u003Ccode>post.updated\u003C\u002Fcode> webhook notifies the external system.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n",4,"Posts API: Beiträge abrufen und Veröffentlichung bestätigen","API-Referenz für Posts in Channels: Beiträge auflisten, einzeln abrufen, Veröffentlichung bestätigen oder zurücknehmen und Fehler behandeln.",[],[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",{"root":57,"tree":62},{"path":58,"title":59,"summary":60,"nav_variant":61},"\u002Fde\u002Fhilfe","Hilfe","Hier findest du Anleitungen, Erklärungen und alles Wichtige rund um Wortfreunde. Damit du das Beste aus deiner Content-Arbeit herausholst.","nested",[63,121,176],{"path":64,"slug":65,"title":66,"position":67,"children":68},"\u002Fde\u002Fhilfe\u002Fcontent","content","Verwaltung von Inhalten",0,[69,86,103],{"path":70,"slug":7,"title":14,"position":71,"children":72},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fposts",1,[73,79],{"path":74,"slug":75,"title":76,"summary":77,"position":71,"children":78},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fposts\u002Ffreigaben","freigaben","Freigaben","Beiträge vor der Veröffentlichung zur Prüfung freigeben lassen",[],{"path":80,"slug":81,"title":82,"summary":83,"position":84,"children":85},"\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":87,"slug":88,"title":89,"position":84,"children":90},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fmediathek","mediathek","Mediathek",[91,97],{"path":92,"slug":93,"title":94,"summary":95,"position":71,"children":96},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fmediathek\u002Fcanva","canva","Canva Integration","Canva Konto verbinden, Designs durchsuchen und in die Mediathek importieren",[],{"path":98,"slug":99,"title":100,"summary":101,"position":84,"children":102},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fmediathek\u002Fkarussells","karussells","Karussells","Karussell-Posts mit mehreren Folien erstellen, bearbeiten und per Chat optimieren",[],{"path":104,"slug":105,"title":106,"position":107,"children":108},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fteams","teams","Teams",3,[109,115],{"path":110,"slug":111,"title":112,"summary":113,"position":71,"children":114},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fteams\u002Fuebersicht","uebersicht","Übersicht","Mit Teams organisierst du Inhalte nach Kontext, damit unterschiedliche Bereiche unabhängig arbeiten können.",[],{"path":116,"slug":117,"title":118,"summary":119,"position":84,"children":120},"\u002Fde\u002Fhilfe\u002Fcontent\u002Fteams\u002Fteam-erstellen","team-erstellen","Team erstellen","So erstellst du ein neues Team und richtest es ein.",[],{"path":122,"slug":123,"title":124,"position":71,"children":125},"\u002Fde\u002Fhilfe\u002Fautomationen","automationen","Automationen",[126,147],{"path":127,"slug":128,"title":129,"position":67,"children":130},"\u002Fde\u002Fhilfe\u002Fautomationen\u002Fgrundlagen","grundlagen","Grundlagen",[131,135,141],{"path":132,"slug":111,"title":112,"summary":133,"position":67,"children":134},"\u002Fde\u002Fhilfe\u002Fautomationen\u002Fgrundlagen\u002Fuebersicht","Wiederkehrende Content-Aufgaben automatisieren. Social-Media-Posts und Content-Ideen per Knopfdruck oder E-Mail erstellen lassen.",[],{"path":136,"slug":137,"title":138,"summary":139,"position":71,"children":140},"\u002Fde\u002Fhilfe\u002Fautomationen\u002Fgrundlagen\u002Feingabefelder","eingabefelder","Eingabefelder & Platzhalter","Eingabefelder definieren und mit Platzhaltern in Aufgaben verwenden.",[],{"path":142,"slug":143,"title":144,"summary":145,"position":84,"children":146},"\u002Fde\u002Fhilfe\u002Fautomationen\u002Fgrundlagen\u002Fstarten","starten","Starten","Content-Automationen im Browser oder per E-Mail auslösen.",[],{"path":148,"slug":149,"title":150,"position":71,"children":151},"\u002Fde\u002Fhilfe\u002Fautomationen\u002Faufgaben","aufgaben","Aufgaben",[152,158,164,170],{"path":153,"slug":154,"title":155,"summary":156,"position":71,"children":157},"\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":159,"slug":160,"title":161,"summary":162,"position":84,"children":163},"\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":165,"slug":166,"title":167,"summary":168,"position":107,"children":169},"\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":171,"slug":172,"title":173,"summary":174,"position":18,"children":175},"\u002Fde\u002Fhilfe\u002Fautomationen\u002Faufgaben\u002Femail-zusammenfassung","email-zusammenfassung","E-Mail-Zusammenfassung","Ergebnisse einer Content-Automation per E-Mail an den Absender zurückschicken.",[],{"path":177,"slug":178,"title":179,"summary":180,"position":84,"children":181},"\u002Fde\u002Fhilfe\u002Fapi","api","Integration mit anderen Systemen","Anbindung an deine Tools, technische Referenz und Single Sign-On",[182,206,239],{"path":183,"slug":184,"title":185,"summary":186,"position":71,"children":187},"\u002Fde\u002Fhilfe\u002Fapi\u002Fgetting-started","getting-started","Getting Started","Learn the basics of using the Wortfreunde API",[188,194,200],{"path":189,"slug":190,"title":191,"summary":192,"position":67,"children":193},"\u002Fde\u002Fhilfe\u002Fapi\u002Fgetting-started\u002Foverview","overview","Overview","Complete API documentation for Wortfreunde services",[],{"path":195,"slug":196,"title":197,"summary":198,"position":84,"children":199},"\u002Fde\u002Fhilfe\u002Fapi\u002Fgetting-started\u002Fauthentication","authentication","Authentication","How to authenticate with the Wortfreunde API",[],{"path":201,"slug":202,"title":203,"summary":204,"position":107,"children":205},"\u002Fde\u002Fhilfe\u002Fapi\u002Fgetting-started\u002Fquick-start","quick-start","Quick Start","Make your first Wortfreunde API calls in minutes",[],{"path":207,"slug":208,"title":209,"summary":210,"position":84,"children":211},"\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference","api-reference","API Reference","Detailed documentation of all API endpoints",[212,218,224,230,232],{"path":213,"slug":214,"title":215,"summary":216,"position":71,"children":217},"\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fendpoints","endpoints","Endpoints","Complete reference of all Wortfreunde API endpoints",[],{"path":219,"slug":220,"title":221,"summary":222,"position":84,"children":223},"\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fusers","users","Users","API endpoints for user management",[],{"path":225,"slug":226,"title":227,"summary":228,"position":107,"children":229},"\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fchannels","channels","Channels","API endpoints for listing and retrieving channels",[],{"path":6,"slug":7,"title":14,"summary":15,"position":18,"children":231},[],{"path":233,"slug":234,"title":235,"summary":236,"position":237,"children":238},"\u002Fde\u002Fhilfe\u002Fapi\u002Fapi-reference\u002Fwebhooks","webhooks","Webhooks","Receive real-time notifications when content changes in Wortfreunde",5,[],{"path":240,"slug":241,"title":242,"summary":243,"position":107,"children":244},"\u002Fde\u002Fhilfe\u002Fapi\u002Fsso","sso","Single Sign On","Single Sign-On integration for external systems",[245,251],{"path":246,"slug":247,"title":248,"summary":249,"position":71,"children":250},"\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":252,"slug":253,"title":254,"summary":255,"position":84,"children":256},"\u002Fde\u002Fhilfe\u002Fapi\u002Fsso\u002Fchromeless-mode","chromeless-mode","Chromeless Mode","Embed Studio pages without navigation, ideal for intranets, SharePoint or external portals",[],[258,267,297],{"title":259,"links":260},"Angebot",[261,262,263,264,265,266],{"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":268,"links":269},"Themen",[270,273,276,279,282,285,288,291,294],{"title":271,"href":272},"Content-Strategie","\u002Fde\u002Fcontent-strategie",{"title":274,"href":275},"Positionierung","\u002Fde\u002Fpositionierung",{"title":277,"href":278},"SEO","\u002Fde\u002Fseo",{"title":280,"href":281},"KI","\u002Fde\u002Fki",{"title":283,"href":284},"Kosten","\u002Fde\u002Fcontent-marketing-kosten",{"title":286,"href":287},"B2B-Vertrieb","\u002Fde\u002Fb2b-vertrieb",{"title":289,"href":290},"LinkedIn","\u002Fde\u002Flinkedin-fuer-unternehmer",{"title":292,"href":293},"Blog","\u002Fde\u002Fblog-fuer-unternehmer",{"title":295,"href":296},"LinkedIn Guide","\u002Fde\u002Flinkedin",{"title":298,"links":299},"Sonstiges",[300,301,304,305,308,311],{"title":59,"href":58},{"title":302,"href":303},"Updates","\u002Fde\u002Fupdates",{"title":47,"href":48},{"title":306,"href":307},"Impressum","\u002Fde\u002Fimpressum",{"title":309,"href":310},"Datenschutz","\u002Fde\u002Fdatenschutz",{"title":312,"href":313},"AGB","\u002Fde\u002Fagb"]