Docs

Changelog

Product and API release timeline for FeedHorizon.

Diese Seite gibt es noch nicht auf Deutsch, deshalb siehst du sie auf Englisch.

2026-11-06

Official SDKs for Node.js and Python

  • @feedhorizon/sdk for Node.js and TypeScript, and feedhorizon for Python (sync and async). Both cover every endpoint, retry safely with idempotency keys, walk lists across pages and verify webhooks. See SDKs.
  • The Node.js and Python examples in the quickstart, guides and recipes now use the SDKs.
  • In the post.updated webhook, data.changes holds only the fields that changed. The schema in /openapi.json marked all five as required.
  • Security and privacy: we sign a data processing agreement (AVV, Art. 28 GDPR) with every business customer.

More docs: concepts, recipes, help

Docs generated from the code

  • Platform limits on every platform page and in Platform Support now come straight from the rules the API checks posts against.
  • The error codes in Errors come from one catalog in the code; a test fails when the API answers with a code the docs do not list. tiktok_privacy_not_allowed was listed as a check before storing, but it happens while publishing and comes back as platform_rejected; it is no longer listed there.
  • New MCP tool reference with every tool, its parameters and the scope it needs.
  • Every webhook event has its own reference page with the full payload schema, for example post.target.failed. The payloads are also in the webhooks section of /openapi.json.
  • Each endpoint page lists the error codes it can answer with, per status, with an example body. Request and response fields show realistic example values.

Publishing errors you can act on

  • targets[].error now has code, category and source besides message. source says who can fix it: user, platform or system. New codes platform_rejected, platform_auth_failed, platform_rate_limited and platform_unavailable replace most publish_failed. See Publishing errors.
  • Only rate limits and outages are retried automatically. A post the platform refused is no longer sent again twice.
  • New webhooks post.target.published and post.target.failed, sent per account as soon as it is done. See Webhooks.
  • The targets in post.published, post.partial and post.failed now carry targetId, accountId, platformUrl and the structured error.
  • Bluesky, Pinterest and TikTok refusals (an image over 1 MB, no board, a video TikTok's checks rejected) now fail at once with platform_rejected instead of being retried.

New docs structure

  • The docs have sections for getting started, concepts, guides, platforms, the MCP server and the API reference. New pages: Data model and API basics.
  • Endpoint pages have readable URLs, for example /docs/api/posts/create. Authentication, errors, rate limits, idempotency and pagination moved to the API reference, the MCP guide to /docs/mcp. Old URLs redirect.
  • error.docUrl points to /docs/api/errors.

2026-11-05

API and docs fixes

  • Every entry in error.details of a failed post check now carries its own code, such as content_too_long, so you can branch on each problem. With several problems error.code is post_invalid.
  • Error handling lists every code the API returns, including media and post-check codes, and a new section on publishing errors in targets[].error.
  • Corrected platform limits: LinkedIn takes one file per post (JPEG, PNG, GIF, MP4 or PDF) and posts to personal profiles only; Instagram takes JPEG, PNG and MP4. See Platform Support.
  • Disconnecting an account deletes its scheduled posts; the docs now say so.
  • Connect links can be created with the API and need no FeedHorizon login. See Connect links.
  • Unknown docs pages answer 404 instead of 500.
  • Instagram posts now link to their real permalink in platformUrl. Before, the link used the media id and did not open the post.

TikTok (beta)

  • Publish and schedule TikTok videos (MP4, MOV or WebM) with a caption of up to 2,200 characters. Accounts connect with TikTok sign-in.
  • Every TikTok post needs options.tiktok.privacyLevel, chosen by the poster from the account's allowed levels. Comments, duets and stitches are off unless allowed, and brandOrganic / brandedContent disclose commercial content. New validation errors tiktok_privacy_required and tiktok_branded_content_private.
  • New endpoint GET /v1/accounts/{id}/tiktok-creator and MCP tool get_tiktok_creator.
  • Until TikTok has reviewed FeedHorizon, videos are published as private. See TikTok.

Pinterest

  • Publish and schedule Pins: one image, or 2 to 5 images as a carousel, with a description of up to 500 characters. Accounts connect with Pinterest sign-in and stay connected through automatic token renewal.
  • New per-account options on post targets. For Pinterest: options.pinterest.boardId, title and link. Without a board the Pin goes to the account's first board.
  • New endpoint GET /v1/accounts/{id}/boards and MCP tool list_pinterest_boards. See Pinterest.

Bluesky

  • Publish and schedule Bluesky posts: text up to 300 characters, up to 4 images (1 MB each), links, hashtags and mentions as rich text. Accounts connect with an app password through the dashboard or a connect link. See Bluesky.
  • New validation error media_too_large when a file exceeds a platform's size limit.

Accounts stay connected

  • Instagram connections are renewed automatically before their 60 days run out. LinkedIn connections are renewed where LinkedIn issues refresh tokens.
  • New webhook account.expiring, sent 7 days before a connection ends that cannot be renewed, and account.needs_reauth, sent once a connection stopped working. The person who connected the account gets an email in both cases. See Webhooks.
  • Accounts in the API have a new field tokenExpiresAt.
  • In the dashboard, an account that needs a reconnect shows a Reconnect button.

2026-11-04

MCP server

  • AI assistants such as Claude and ChatGPT can connect at https://feedhorizon.com/mcp, with OAuth sign-in or an API key. 18 tools cover posts, queues, media and connect links. See MCP Server.
  • API & Apps in the dashboard lists the connected apps of the organization and disconnects them.

API

Breaking changes, all at once, so that everything after this builds on one consistent base:

  • Errors have one shape everywhere: { "error": { "type", "code", "message", "param", "details", "docUrl", "requestId" } }. Branch on type and code, never on message. See Error handling.
  • Lists return { "data", "nextCursor" } and page with cursor and limit (1 to 100, default 20). The meta object with page, perPage and total is gone. See Pagination.
  • Statuses are lowercase, for example published and partially_failed.
  • Objects in profiles your key cannot access now answer 404 instead of 403.
  • Webhook signatures include a timestamp: X-Webhook-Signature: t=<unix>,v1=<hex>, signed over <t>.<body>. Every event has an id, also sent as X-Webhook-Id. See Webhooks.
  • The events message.received and comment.received were removed. They were never sent.
  • The mediaUrls field on posts was removed. Use mediaIds instead, see Media uploads.

New:

  • Idempotency-Key header on every write. A retry with the same key within 24 hours returns the first response. See Idempotency.
  • Rate limits per API key by plan, shared across all servers, with X-RateLimit-* and Retry-After headers. See Rate limits.
  • Every response carries x-request-id.
  • The API reference and /openapi.json are generated from the code that serves the API, so they cannot drift apart.
  • GET /api/v1/me returns the organization, plan, rate limit and the calling key with its scopes. Use it to check a key.
  • GET /api/v1/platforms lists every platform with text length, media limits and whether it is available yet.
  • Profiles can carry your own id in externalId, unique per organization. Filter with GET /api/v1/profiles?externalId=….
  • API keys have a list of scopes, such as posts:write. permission stays as a shorthand. See Authentication.
  • Posts take targets: the accounts to publish to, each with optional own text. Every target in a response shows its content (null when it uses the post text). See Scheduling.
  • Posts are checked against each platform before they are stored (text length, media, schedule). All problems come back at once in error.details. POST /api/v1/posts/validate runs the same checks as a dry run.
  • POST /api/v1/posts/{id}/publish, /cancel and /duplicate.
  • GET /api/v1/posts?updatedSince=… for syncing.
  • Queue endpoints: GET and PUT /api/v1/profiles/{id}/queue, GET /api/v1/profiles/{id}/queue/slots. See Scheduling.
  • Media through the API: POST /api/v1/media imports a file from a URL or returns a direct upload link, and mediaIds attaches files to posts. See Media uploads.

2026-03-09

Docs

  • Clustered docs navigation into Guides, Platforms and API Reference
  • Added new Guides pages for Scheduling and Webhooks
  • Expanded Platforms section with coming-soon platform pages
  • Added top-level Pricing and Changelog docs pages
  • Added Resources section in docs sidebar

2026-03-07

Integrations

  • Added Instagram OAuth connect flow and callback handling
  • Added invite-token state support for delegated account linking

Documentation

  • Added Instagram platform guide and SaaS setup checklist
  • Updated architecture and roadmap documentation

2026-03-01

API

  • Added API key management endpoints and dashboard UI
  • Added webhook CRUD and test delivery endpoints
  • Added rate limiting headers and enforcement

Platform invites

  • Added invitation links for delegated platform connections
  • Added invite landing page and single-use token flow