API & MCP changelog

Every change to Pamba's REST API and MCP tools, newest first. Breaking changes say what to change on your side.

MCP server https://api.pamba.app/mcp · API docs · MCP tool reference

BreakingChangedAccounts· Updated Nov 5

Suspended Instagram accounts are replaced by the Pamba team

When Instagram suspends one of your accounts in its first day, or bans one, the Pamba team replaces it for you. Until then, recreating it, or another Instagram account on its device, is refused because the device is held. An account suspended after its first day you can now replace yourself, for free.

POST /devices/accounts/recreate and the recreate_social_account tool refuse an Instagram account whose device held a suspended or banned account with phone_on_hold, and GET /devices/accounts/recreation and get_account_recreation report the same refusal.

What to change: treat phone_on_hold on such an account as final unless it carries replacement_offer, and contact support for its replacement.

Since 2026-11-05 an Instagram account suspended, or asked for identity verification, after its first day carries replacement_offer, and POST /devices/accounts/recreate replaces it for free on a new phone instead of answering phone_on_hold.

BreakingChangedPosting & scheduling

Instagram reel drafts, and 10 drafts per account

only_create_draft now saves an Instagram reel as a draft in the app instead of sharing it, as it already did for TikTok posts, and one account gets at most 10 drafts.

only_create_draft: true on POST /projects/{projectId}/schedule now makes every leg a draft, the Instagram reel included: the phone prepares the reel as usual and saves it as a draft instead of sharing it. Before, only the TikTok leg was saved as a draft and the Instagram leg was shared. POST /devices/instagram/avatar-projects/{avatarProjectId}/posts and schedule_instagram_post take only_create_draft too, schedule_post now takes it for every platform it schedules, and PUT /devices/tiktok/posts/{postId} and update_scheduled_post turn it on or off for an Instagram post as well as a TikTok one.

A draft is never shared, so its post completes with nothing live and its project reads draft_created, or posted when another of its posts already went live. Pamba never publishes a draft later.

New error_code on a refused schedule or edit: instagram_draft_not_shareable (400). An Instagram draft takes no share_to_facebook: true and no trial_reel, and the automatic Facebook cross-post skips it.

Each draft takes room on the account's phone, so one TikTok or Instagram account gets at most 10 drafts in its life. A cancelled or failed draft is not counted, except an Instagram one whose outcome was lost. Past that, a draft is refused with the new code draft_limit_reached: as error_code on a schedule (409) and on an edit that would make a post a draft or move one to another account (400), and as code on a retry (409).

What to change: to share the Instagram reel while TikTok saves a draft, schedule TikTok alone with only_create_draft: true on POST /projects/{projectId}/schedule and the reel without it on POST /devices/instagram/avatar-projects/{avatarProjectId}/posts (or schedule_instagram_post). Leave share_to_facebook and trial_reel out of a draft, and once an account has its 10 drafts, schedule posts for it instead.

BreakingChangedAccounts

The high-demand notice on account seats no longer depends on your order

When you buy account seats, the notice that new accounts may take up to 3 days to be created now shows whenever new phones are short, whatever seats you pick.

Removed from GET /devices/accounts/seat-options: max_purchasable_seats, high_demand_from_seats and high_demand_from_seats_by_platform. purchase_account_seats no longer returns high_demand_platforms.

Changed: high_demand is true while Pamba's phones are short of room for new accounts, and while it is true every checkout purchase_account_seats creates carries high_demand_notice, whatever its seats.

What to change: show the notice when high_demand is true, and stop reading the removed fields.

BreakingChangedComments

Comment-to-DM automations send the link once they reply

An automation now sends two messages. The first asks the person to reply and has no link; when they reply yes, Pamba sends the second, with your link. Instagram doesn't let someone who doesn't follow you tap a link until they reply, and sending links only to people who asked for them keeps your accounts from being flagged as spam.

POST /comments/automations and create_comment_automation require follow_up_text, the message with the link, up to 1,000 characters. A save checks both messages: 400 link_in_first_message for a link in dm_text, 400 follow_up_required when follow_up_text is missing or only a link, 400 follow_up_too_long past 1,000 characters. Turning an automation on needs follow_up_text; one that is off without it can still be saved while it stays off.

Existing automations moved to two messages: a message with a link became follow_up_text, after a default first message in dm_text; one with no link, or only a link, kept its message and was turned off until it has a second one.

New fields: follow_up_text on an automation, and replied_yes and links_sent in its last_7_days; follow_up_status, follow_up_detail, follow_up_sent_at and replied_at on each run of GET /comments/automations/{automationId}/activity; follow_up_status, follow_up_detail and replied_at on each automations item of GET /comments.

What to change: move the link from dm_text to follow_up_text, and send follow_up_text when you create an automation or turn one on.

Read the guide
BreakingChangedAccounts

High demand on account seats is read per platform

When you buy account seats, the notice that new accounts may take up to 3 days to be created now looks at each platform in your order, so an order only for platforms with room is not told to wait.

New field: high_demand_from_seats_by_platform on GET /devices/accounts/seat-options, per platform the smallest order, in seats across platforms, it has no room for; a platform absent has room for an order of any size. purchase_account_seats adds high_demand_platforms, the platforms with no room at all, and its checkout's high_demand_notice says when an order waits.

Changed: high_demand_from_seats is null until every platform is listed in the new field, then the largest of its values, and high_demand is true only when every value is 1.

Changed: linking an account by its password (POST /devices/instagram/avatar-projects/{avatarProjectId}/link-account, POST /devices/facebook/avatar-projects/{avatarProjectId}/link-account, link_social_account) answers 409 no_workspace_phone when the workspace holds the Instagram side of none of its phones; an Instagram seat brings one.

What to change: read high_demand_from_seats_by_platform with open_slots to tell whether an order waits (over MCP, the checkout's high_demand_notice): high_demand_from_seats and high_demand now speak only for an order every platform is short for.

BreakingChangedAccounts

Imports only you can move on come back to you

When an account import Pamba's team is finishing needs something only you can do, such as approving the sign-in on your own phone, it comes back to you with the reason, and you retry it once that's done.

An import in with_team can now move to needs_customer, with a failure. New failure.code: approve_on_device, a sign-in approval asked on the owner's own phone that never came; retry it once that phone is at hand. An import whose wait for that approval ends unanswered now reads approve_on_device, where it read code_timeout. On GET /devices/accounts/imports, GET /devices/accounts/imports/{importId} and get_account_import_status.

What to change: handle approve_on_device as a needs_customer failure the owner clears on their own phone before a retry, as you handled code_timeout.

BreakingRemovedWarming

Boost routes and tools removed

The routes and tools that put a temporary boost on an account's warming are gone. An account's warming settings are its search terms and its search and follow switches.

Removed, now 404: GET, PUT and DELETE /devices/accounts/warming/boost.

Removed tools: get_account_warming_boost, start_account_warming_boost, end_account_warming_boost.

Now refused (400, nothing applied): PUT /avatars/projects/{projectId}/selected-avatar with a warming_config that sets anything but the search terms and the search and follow switches.

Changed: a warming_config without search_terms leaves the terms as they are (it used to reset them).

What to change: drop the boost calls, and send only search terms and switches in warming_config.

BreakingChangedAccounts

Archived accounts are read-only

An archived account keeps its posts and history in Analytics, and nothing runs on it: no posts, warming, comments or profile edits.

Every request that would run or change anything on an archived account, its status included, is refused with 409 account_archived, and the tools return status account_archived. Work still queued for it leaves the schedule with the same code, and a post on it fails as tiktok_account_archived (TikTok) or instagram_account_paused (Instagram).

What to change: treat account_archived as final. Only the Pamba team can bring an archived account back.

BreakingChangedPosting & scheduling

The same content goes out once per platform

The same video or slideshow can't be scheduled on two accounts of one platform. Posting it to a TikTok and an Instagram account still works.

POST /projects/{projectId}/schedule, POST /devices/instagram/avatar-projects/{avatarProjectId}/posts and POST /slideshows/{slideshowId}/schedule answer 409 duplicate_content; PUT /devices/tiktok/posts/{postId} answers 400 with the same code.

schedule_post, schedule_instagram_post, schedule_slideshow_post and update_scheduled_post return status duplicate_content.

What to change: give each account of a platform its own video or slideshow.

Additive changes never need action. Breaking ones always say what to change.