Skip to main content
Facebook and Instagram comments: fixed comments occasionally being posted twice. When creating a comment took too long (usually while Facebook built a link preview), our request timed out, the comment still got created, and the automatic retry posted it again. Before an automatic retry we now check whether the comment already exists on the post (or under the parent comment) and, if it does, adopt it instead of posting again; if that check can’t run, the retry waits rather than risk a duplicate. Comment creation also gets more time, so these retries are much rarer.Instagram reconnect: a reconnect (reconnect: true) now always asks Instagram for a fresh login, so it can’t silently reuse a different account the browser is logged into.
Instagram reconnect in place: POST /api/v1/social-account/connect accepts reconnect: true to re-authorize the Instagram account already connected to a team, instead of disconnecting it. Tokens and permissions are refreshed; the account, its draft and scheduled posts stay. In the dashboard and hosted portal, open Disconnect and choose Reconnect. Supported for Instagram connected with Instagram login (instagramConnectionMethod: "INSTAGRAM"); the user must log in with the same account (instagram-reconnect-different-account otherwise). See OAuth Options.Instagram login: connecting now fails with instagram-not-enough-permissions when the publish permission isn’t granted, instead of connecting an account that can’t publish.Google Business:
  • An unticked “Google Business listings” permission on the consent screen now returns google-business-not-enough-permissions instead of the generic google-business-callback. See Callback Parameters.
  • userId is always Google’s own account id; a connection without one now fails instead of storing a placeholder.
  • refresh-channels clears the selected location when the login no longer has access to it, so the account asks for a new one.
  • Docs: OFFER posts need eventStartDate and at least one offer field, and can’t have a call-to-action button. See Google Business.
Threads: reposts no longer count toward the profile’s post count and aren’t imported as your own posts.Pinterest:
  • Per-pin raw analytics are now stored, so the raw endpoints return pin clicks, outbound clicks, impressions and saves (from the next refresh).
  • Video Pins now get Pinterest’s video metrics (VIDEO_START, VIDEO_MRC_VIEW, watch time), so views is filled for video Pins.
TikTok + other platforms: a post no longer ends in ERROR when TikTok confirms publication a few seconds after our first status check, while the other platforms are still publishing.
Deprecation: the teams array in GET /api/v1/organization is deprecated and will be removed on November 15, 2026. It isn’t paginated and gets slow for organizations with many teams. List teams with the paginated GET /api/v1/team instead (offset, limit, optional search; returns { items, total }). The rest of the organization response stays the same. See Finding your team IDs.Post import: new onlyLatest option. With onlyLatest: true, an import checks only the latest count posts and imports the ones you don’t have yet, so a daily sync with nothing new imports nothing and uses none of your limit. Without it, count still means “count posts you don’t have yet”, going further back if needed. See What count means.YouTube thumbnails: when YouTube rejects a custom thumbnail, we now retry it a few times (YouTube often refuses it while a new video is still processing). If it still fails, the post stays POSTED and YouTube’s reason shows up in errors.YOUTUBE, instead of the thumbnail silently going missing.
Google review imports: count is now the number of new reviews to import. Reviews you already have are refreshed but skipped, so re-running an import continues into older reviews until it has count new ones or Google has no more, instead of stopping after the newest page. Only new reviews use up the monthly import limit. See Google Business Reviews.YouTube: Shorts are now correctly flagged (contentType: "SHORTS", isShort: true) and get /shorts/<id> links. Re-running a post history import also updates permalink and extraData on posts you already imported, so existing Shorts pick up the right link.Instagram raw analytics: reachByFollowType now covers the last 30 days, the same window as totals30d, instead of only the last 24 hours.
Audience demographics in raw analytics, across more platforms:
  • YouTube: channel-level age × gender and countries (last 365 days) under demographics.
  • Instagram: combined follower age × gender (follower_demographics_age_gender) and hourly follower activity (onlineFollowers, accounts with 100+ followers).
  • TikTok: hourly follower activity (audience_activity).
  • Threads: follower country, city, age, and gender under followerDemographics (profiles with 100+ followers). Collected with the same switch as Instagram demographics.
  • LinkedIn Pages: lifetime follower breakdowns by country, region, industry, seniority, job function, and company size under followerStatistics.
  • Snapchat: viewer age × gender and countries under demographics.
YouTube post analytics: lifetime shares, estimatedMinutesWatched, averageViewDuration, and averageViewPercentage per video under lifetimeTotals, and the normalized shares metric now uses the real number instead of 0. Shorts are flagged with contentType / isShort, and imported Shorts link to /shorts/<id>.Facebook post analytics: shares also read the post insights where Meta provides them, and the higher of the two counts is used, so shares missing from the post’s share count show up.Pinterest account analytics: postCount is the account’s real total pin count, and follower/following counts are no longer capped on larger accounts.Facebook post history import no longer fails when the Page has items without an ID (for example a live Story); those items are skipped.Connected accounts now renew their access tokens more reliably, fixing a period where some YouTube, Google Business, Snapchat, and Bluesky posts failed with authentication errors.Dashboard analytics: total charts (like followers) zoom to the actual range and show the scale, so small day-to-day changes are visible.
Reddit: the subreddit list now loads every subreddit the account belongs to, not just the first page.Hosted connect portal: link expiry is now decided by our API instead of the device clock, so links no longer show as expired on devices with a wrong time.
Facebook Page mentions: GET /api/v1/misc/facebook/pages finds a Page by URL, @handle, ID, or name, so you can tag it in a post with @[pageId]. See Page Mentions.TikTok raw analytics: follower genders and countries (audience_genders, audience_countries).Instagram (Instagram Login): fixed an “Invalid scope” error when connecting while logged out of Instagram.
TikTok: a custom thumbnail must be an image uploaded to bundle.social. Other URLs are rejected with a 400 up front, since TikTok only accepts covers from verified domains.
Instagram analytics: posts Instagram has no insights for (published before the account switched to professional, or too few viewers) now return no data instead of a row of zeros. Posts that can never have insights stop being refreshed, and a forced refresh returns 400 with Meta’s reason.Snapchat: connecting an account without a Public Profile now fails with a clear “no Public Profile” message. Saved Stories are documented, with a Troubleshooting table for common Snapchat errors.Bluesky video: we check Bluesky’s upload limits before each video upload, so refusals come back with Bluesky’s reason (for example an unverified email or the daily video limit) instead of http_401. The daily limit is retried.Comments: POST /comment returns 404 for a post that doesn’t exist or was deleted, and clear errors when the target post isn’t published on the platform yet.X analytics are documented: available on demand through the force endpoints, billed from X credits.Upload retention is documented as it works: unused uploads are cleaned up 14 days after upload or after the last post using them finished, and deleted uploads are kept for 2 days.DMs: reactions and marking a conversation as read don’t count toward the monthly message limit.copyTeamId was removed from POST /team. It never had an effect; requests that still send it keep working.
Direct Messages and Automations are available through the public API: read and answer Instagram and Facebook DMs (including private replies to comments), and build comment and DM automation flows. Automations also cover TikTok comments (public reply and like). Both are enabled per organization on request. See Direct Messages and Automations.Snapchat Stories: storyDuration (ONE_DAY, TWO_DAYS, THREE_DAYS, ONE_WEEK) sets how long a Story stays visible. Snapchat’s default applies when it’s omitted, and ONE_WEEK requires Snapchat+.Instagram raw analytics: profile link taps broken down by contact button type (last 30 days), collected with the raw Instagram demographics switch.Bluesky: URLs in post text become clickable links, including ones written without https://, and work alongside hashtags.LinkedIn post history import: imported posts include their image and video media and thumbnails, and single-image and single-video posts get the right post type.
X reposts: POST /api/v1/misc/twitter/retweet reposts any X post from a connected account and DELETE /api/v1/misc/twitter/retweet undoes it. Billed from X credits once per post, per account, per UTC day.X: videos longer than 140 seconds are uploaded with X’s long-video category, so accounts allowed to post longer videos can publish them.Facebook post analytics: video posts and Reels are recognized as videos and read from video insights. Raw post analytics also include more video metrics and clicks broken down by type (post_clicks_by_type).Facebook and Instagram accounts using Page tokens that don’t expire are no longer asked to reconnect.Google Business Profile: fixed deleting media. An invalid media ID now returns a clear error.
TikTok video posts: a custom thumbnail is now sent to TikTok as the video cover, and the post composer has a cover picker for videos. thumbnail on IMAGE posts is rejected.
Forced analytics refreshes: the limit is now 6 per social account and 6 per post in a rolling 24 hours, up from 5.TikTok comments: comment text (including firstComment) can be up to 1,200 characters, up from 150. New TikTok comments can also be imported automatically as they arrive; this is off by default and enabled per organization on request.Social accounts that lose access are now kept for at least 48 hours before they’re removed, instead of within minutes, so there’s time to reconnect.
Social accounts now return userEmail, the email of the connected platform account when the platform shares it.Facebook video posts: fixed first comments and publishing failing while Facebook was still processing the video.Dashboard: an alert when your subscription payment is past due, unpaid, or incomplete, with a button to update your payment details.
Snapchat Saved Stories: type: "SAVED_STORY" publishes up to 20 images and videos as one Saved Story. A title (max 45 characters) is required, and the snaps together can run up to 5 minutes. See Snapchat.Google Business Profile: GET /api/v1/misc/google-business/location/search-keywords returns the search terms customers used to find a location, for a startMonth-endMonth range (YYYY-MM). Low-volume keywords come back as a threshold instead of an exact value. The available-attributes endpoint now returns lookup, which tells you whether your regionCode and languageCode were applied.CSV bulk import: per-platform FirstComment columns, media and thumbnail links (including Google Drive links), and validated per-platform post types. See Bulk Posts via CSV.Instagram analytics: single-video feed posts are recognized as Reels (which is how Instagram publishes them), so their insights load.LinkedIn analytics: per-post reaction counts come from LinkedIn’s reactions list, so they match what LinkedIn shows, and account-level reactions add up to the posts below them.TikTok: posts TikTok reports as PUBLISH_COMPLETE are marked published even when TikTok doesn’t return a public post ID.
Facebook text backgrounds: textFormatPresetId in data.FACEBOOK publishes a POST without video on a colored, gradient, or illustrated background. GET /api/v1/misc/facebook/text-format-presets lists the presets, and CSV import accepts the preset ID too.Analytics are now part of paid plans. Organizations on the Free plan no longer collect analytics.Instagram raw analytics: follower_demographics_last_14_days is now always null, since Meta no longer provides it. Use the 30-day demographics instead.Dashboard translation for Arabic, with right-to-left layout.
X post options in data.TWITTER: poll (2 to 4 options, 5 minutes to 7 days), quoteTweetId, replyToTweetId, subscribersOnly, thread (an explicit list of tweets), tweetStorm (auto-split long text, with optional tweetStormNumbering), and per-image alt text through mediaItems. A poll can’t be combined with media, a quote, or a thread.X comments: publish them through POST /comment, delete them with DELETE /api/v1/misc/twitter/comment, and import X comments and post history. These actions are billed from X credits.Credits: GET /api/v1/billing/credits/balance returns your prepaid credit balance, and POST /api/v1/billing/billable-usage/quote estimates the cost of a metered X action before you run it.Reddit: fixed post permalinks for profile and subreddit posts.
Dashboard analytics: redesigned per-platform metric cards. Metrics a platform doesn’t report are listed in a “Not reported” card instead of charted as zero.
Google Business Profile reviews: imported reviews include the owner reply’s moderation state (reviewReplyState), any reviewReplyPolicyViolation, and reviewReplyUrl.
Bluesky connect: serverUrl is now optional and defaults to https://bsky.social. For Bluesky and Mastodon, an unusable serverUrl returns 400 with the reason instead of a generic 500.Forced analytics refresh: when the platform refuses, the error now carries the platform’s reason (for example an expired token, a missing permission, or a rate limit) instead of a generic message.Post analytics requests for a platform that doesn’t support post analytics now return a clear error. Google Business Profile account analytics include bookings, food orders, and food menu clicks for eligible locations.postDate must now fall between the years 2000 and 2100.Facebook: connecting an account that manages hundreds of Pages is faster and more reliable.
Multipart uploads for large files: POST /api/v1/upload/multipart/init, /sign, /complete, and /abort upload a file in parts, in parallel. See Upload Content.Facebook connect now finds Pages managed through Business portfolios. Instagram captions can be up to 2,200 characters, up from 2,000.Facebook raw post analytics: more video metrics (complete views, unique viewers, average watch time, 10-second views, Reels plays, total view time) and per-bucket audience retention.Facebook comment import now works for Reels and video posts.
Threads: fixed publishing carousel posts (multiple images or videos). Temporary Threads errors are retried without creating duplicate posts.
LinkedIn mentions: when a person is resolved from a profile URL but LinkedIn doesn’t share their name, the tag comes back with an empty display and needsDisplayName: true. Pass displayName to set it, since LinkedIn only renders a mention when the text matches the name exactly.Post history and comment imports no longer fail on unexpected date formats from the platform.
Automatic first comment: a firstComment field on post create and update that publishes a comment as soon as the post itself goes live. Available for TikTok, YouTube, Instagram, Facebook, Threads, LinkedIn, Reddit, Mastodon, Discord, Slack, and Bluesky, each with its own character limit. It is echoed back on create/update and single-post responses, and the underlying comment can still be edited through the comment endpoints.AI content labels: isAiGenerated for X, Pinterest, and Instagram, applying each platform’s native AI disclosure label.Instagram paid partnerships: isPaidPartnership for the native “Paid partnership” label, and brandedContentSponsors to tag up to 2 sponsor usernames (accounts connected through Facebook Login only).Snapchat videos now accept 5-180 seconds, up from 6-60.DELETE /misc/instagram/comment to permanently delete a published Instagram comment, also available from the dashboard’s post comments panel.Dashboard translations for Danish, Thai, Korean, and Hebrew.
Threads post options: single topicTag, replyControl, linkAttachment, poll, gif (GIPHY), allowlistedCountryCodes, and Instagram Story cross-posting. Polls, GIFs, and link attachments are text-only.YouTube monetization: revenue/monetization data in raw analytics when an account connects with withBusinessScope (the monetary analytics scope) and raw analytics are enabled for the organization. Channel-level and per-video revenue reports; channels not in YPP return "no data available".withBusinessScope now applies to YouTube in both the hosted and custom connect flows.Twitter/X is moving to a usage-based billing model. X API posting costs are passed through at cost, 1:1, with no markup.
Snapchat Public Profile integration: OAuth connection, scheduled Stories and Spotlights, normalized profile and content analytics, and CSV bulk-post support.Post history import improvements across Facebook, Instagram, LinkedIn, Pinterest, and Threads, including more consistent imported media metadata.Instagram business discovery can now return recent public media items.Experimental tiktokForceLogin option for hosted and custom OAuth flows when TikTok keeps reusing the wrong active account.
Bluesky external link cards now support an uploaded thumbnail.LinkedIn post reshares, mention resolution from profile/company URLs, and improved mention metadata.Facebook Page posts and Reels now support videos up to 20 minutes.YouTube post and edit payloads now support defaultLanguage and defaultAudioLanguage.Video uploads increased to 5 GB through the large upload flow. Upload-from-URL handling was also made more reliable.
Custom referenceKey values for posts, including lookup by reference key and organization-level conflict protection.Comment import and top-level comments now support historical posts through importedPostId.Improved monthly usage counting and per-external-account daily limits.Invoices are now available from the organization Billing view.
Manual retry endpoint for failed comments.Reconnect helpers for attaching a newly connected social account to matching draft and scheduled posts.Hosted portal links now support serverUrl and instagramConnectionMethod.Automatic cleanup for uploads left unused for 90 days.
Instagram Music API.Stripe customer portal link configurator for connect flows, and support for custom Stripe prices.Plan tiers moved into the shared package so SDK and dashboard stay in sync.
MOV file upload support.OAuth callback redirect - return users to a custom URL after connecting a platform.Reddit post metadata improvements.Webhooks now auto-disable after repeated delivery failures.Comment import schema fixes and admin token debugger.
TikTok webhook events.TikTok additional post metadata, and a retryable field on platform errors.Surfaced real platform errors through the API instead of generic failure messages.Facebook & Instagram OAuth flow fixes.Standardized error messages across integrations.
forceBrowserOAuth flag for OAuth flows.Custom rate limits per organization.Google Drive and Dropbox as upload sources.Health endpoint exposes per-platform status.Downgrade at the end of the billing cycle.
Facebook Reviews - fetch and reply to reviews on Facebook Pages.Google Business Profile management in the dashboard.Calendar grid timezone fix.
Comments imports7 and 14 day raw analytics data for InstagramFull Google Business API moduleRaw Analytics for YouTubeFacebook oauth flow change
Bulk posting, create many posts from a spreadsheet.Upload files via URL.Scheduled posts calendar.Facebook & Instagram connection, optional withBusinessScope.LinkedIn, GIF publishing supported. Raw analytics store reaction breakdowns.Meta image posts, optional alt text for accessibility.TikTok image auto-scaling for Photo Mode when assets exceed 1920×1080 or the inverse.
Improved Linkedin analytics with additional data.Added ability to post Linkedin GIFs.Added reauthenticate option on social accounts page.Fixed an edge case where a post was retrying, even though a “Account is restricted” error was thrown.
Added image auto-scaling functionality for TikTok IMAGE posts to optimize content delivery.Fixed shares tracking for all Instagram post types (previously only counted for Reels).Enhanced error handling for TikTok publishing with clearer feedback messages.Improved Instagram metrics collection with intelligent retry logic for unsupported metrics.Enhanced image validation guidance to recommend auto-fit and auto-crop options where applicable.
Instagram Trial Reels with trialParams.graduationStrategy.Instagram autoFitImage and autoCropImage for non-standard aspect ratios.LinkedIn article preview via link field.disableAutoLogin flag for Facebook, Instagram, and TikTok OAuth flows.
Instagram location search endpoint.Instagram business discovery restrictions for direct connections.Instagram payload validation updates.
Improved disconnect check.TikTok Commercial Music Library. DocsGoogle Business Reviews.Remote disconnection detection.Unset channel without re-auth.Twitter reply settings.YouTube raw analytics demographics.Import filtering by surface and media type with carousel support.Analytics for imported posts.Data retention cleanup.
Post history import with analytics.
Improved Linkedin analytics.Business account search for Instagram.
Post updates in misc endpoints.Youtube description formatting.
Verbose error messages.Custom interval for analytics.Force analytics.Tiktok analytics data fix.Automatic posting retries.Force manual posting retries.Deleting used uploads.Upload compression support (disabled by default).
Bluesky integration.Google Business Profile integration.
Linkedin PDFs support.Linkedin tags.Social accounts and channels avatars.
Instagram direct connection.Translations for connect page.Fixes for users with a huge amount of Facebook pages connected
Team list endpoint.Used/Unused uploads.
Facebook post link.Tiktok thumbnails.Instagram collaborators and tagged accounts.Upload get list filters.
Shared uploads and thumbnails.
Handle large uploads.
Exposed analytics endpoints for bundle.social API.
Added the ability to create comments to posts created via bundle.social.
Handling multiple images for Linkedin.
Added additional fields to create portal link endpoint. Now you can specify company logo, user name and user logo.
Create portal link endpoint to enable your users to easily connect their social accounts on our hosted page.
Mastodon integration.
Custom team plans, link in bio and threads integration.
This is a release of the new version of the API.Changes include:
  • moved the API key from team to organization
  • added the ability to manage teams
  • added the ability to connect social accounts
Basic profile and post analytics for Youtube, Tiktok, Instagram and Facebook.
This is the first changelog entry.The following changes have been made:
  • bundle.social has been released
  • api.bundle.social has been released
  • bundlesocial node SDK has been released