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/sdkfor Node.js and TypeScript, andfeedhorizonfor 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.updatedwebhook,data.changesholds 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
- New concept pages: Post lifecycle, with what you can do in each state, and Agencies and SaaS.
- New recipes with complete code in cURL, Node.js and Python: post an image to several platforms, onboard a customer, handle failed posts, keep your app in sync.
- Code examples in the quickstart and guides switch between cURL, Node.js and Python.
- MCP: prompts and instructions for assistants and troubleshooting.
- Build with AI: a prompt that gets coding agents to write correct integrations.
- Help: FAQ, glossary, security and privacy and the versioning policy.
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_allowedwas listed as a check before storing, but it happens while publishing and comes back asplatform_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
webhookssection 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[].errornow hascode,categoryandsourcebesidesmessage.sourcesays who can fix it:user,platformorsystem. New codesplatform_rejected,platform_auth_failed,platform_rate_limitedandplatform_unavailablereplace mostpublish_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.publishedandpost.target.failed, sent per account as soon as it is done. See Webhooks. - The
targetsinpost.published,post.partialandpost.failednow carrytargetId,accountId,platformUrland the structurederror. - Bluesky, Pinterest and TikTok refusals (an image over 1 MB, no board, a video TikTok's checks rejected) now fail at once with
platform_rejectedinstead 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.docUrlpoints to /docs/api/errors.
2026-11-05
API and docs fixes
- Every entry in
error.detailsof a failed post check now carries its owncode, such ascontent_too_long, so you can branch on each problem. With several problemserror.codeispost_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, andbrandOrganic/brandedContentdisclose commercial content. New validation errorstiktok_privacy_requiredandtiktok_branded_content_private. - New endpoint
GET /v1/accounts/{id}/tiktok-creatorand MCP toolget_tiktok_creator. - Until TikTok has reviewed FeedHorizon, videos are published as private. See TikTok.
- 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
optionson post targets. For Pinterest:options.pinterest.boardId,titleandlink. Without a board the Pin goes to the account's first board. - New endpoint
GET /v1/accounts/{id}/boardsand MCP toollist_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_largewhen 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, andaccount.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 ontypeandcode, never onmessage. See Error handling. - Lists return
{ "data", "nextCursor" }and page withcursorandlimit(1 to 100, default 20). Themetaobject withpage,perPageandtotalis gone. See Pagination. - Statuses are lowercase, for example
publishedandpartially_failed. - Objects in profiles your key cannot access now answer
404instead of403. - Webhook signatures include a timestamp:
X-Webhook-Signature: t=<unix>,v1=<hex>, signed over<t>.<body>. Every event has anid, also sent asX-Webhook-Id. See Webhooks. - The events
message.receivedandcomment.receivedwere removed. They were never sent. - The
mediaUrlsfield on posts was removed. UsemediaIdsinstead, see Media uploads.
New:
Idempotency-Keyheader 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-*andRetry-Afterheaders. 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/mereturns the organization, plan, rate limit and the calling key with its scopes. Use it to check a key.GET /api/v1/platformslists 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 withGET /api/v1/profiles?externalId=…. - API keys have a list of
scopes, such asposts:write.permissionstays as a shorthand. See Authentication. - Posts take
targets: the accounts to publish to, each with optional own text. Every target in a response shows itscontent(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/validateruns the same checks as a dry run. POST /api/v1/posts/{id}/publish,/canceland/duplicate.GET /api/v1/posts?updatedSince=…for syncing.- Queue endpoints:
GETandPUT /api/v1/profiles/{id}/queue,GET /api/v1/profiles/{id}/queue/slots. See Scheduling. - Media through the API:
POST /api/v1/mediaimports a file from a URL or returns a direct upload link, andmediaIdsattaches 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