Changelog
Product and API release timeline for FeedHorizon.
2026-11-06
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.
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