MARKETING · MESSAGING
Media, stories, mentions, and insights for the professional account they connected.
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
instagram_business_create_media_containerWRITEStage a post, Reel, Story or carousel WITHOUT publishing it. This is step one of Instagram's two-step flow and it is the safe half: it returns a container id and nothing is visible to anybody yet. The image or video must already be reachable at a public HTTPS URL that Instagram itself downloads; JPEG is the only image format Instagram accepts. For a carousel, call this once per slide with is_carousel_item=true (up to 10), then once more with media_type=CAROUSEL and those ids in `children`. Video and Reels containers process asynchronously — poll instagram_business_get_media_container_status until it reads FINISHED. A container expires unpublished after 24 hours. Publishing is a separate tool and a separate decision.
instagram_business_create_product_appealWRITEAsk Instagram to re-review a product it rejected for shopping, with a written reason. The reason is read by a Meta reviewer, so it is outward text written under the customer's business name — say what is true about the product and nothing else. Check instagram_business_get_product_appeal first: appealing a product that is not eligible spends the one appeal Instagram allows.
instagram_business_delete_mediaWRITEDESTRUCTIVE — permanently delete a post, Reel, Story or whole carousel the connected account published. THIS IS THE UNDO FOR PUBLISHING and it is why publishing is offered. It deletes the post's comments and its insights with it, there is no restore, and it does not retract reshares, screenshots or the notification Instagram already sent. A carousel is deleted whole — Instagram publishes no way to remove one slide. Only available on a connection made through Facebook Login; on an Instagram-login connection this refuses before sending anything and says so.
instagram_business_describe_connectionREADReport what this Instagram connection actually is: which of Meta's two Instagram APIs it authenticates through, which Instagram professional account it is bound to, which Facebook Page (if any) that account is linked to, which permissions Instagram says the token really carries, and when the token expires. ASK THIS FIRST WHEN SOMETHING 403s. Meta declines a permission the app has not passed App Review for without failing the login, so a connection can look perfectly healthy and be missing exactly the capability you need — this is the tool that says which. Reads no Instagram content and counts against no quota.
instagram_business_get_accountREADRead the connected Instagram professional account's profile: username, name, biography, website, account type, follower count, following count and media count. START HERE — the account id this returns is what every other tool defaults to. The profile picture URL is removed before you see it: Instagram serves it from a pre-authenticated CDN link that hands the image to anyone holding it.
instagram_business_get_account_insightsREADRead Instagram Insights for the connected account over a date range: reach, views, total interactions, likes, comments, saves, shares, replies, reposts, profile link taps and follows/unfollows. Ask for the metrics you want by name in `metric`; Instagram's metric vocabulary changes between Graph API versions, so an unknown name comes back as Instagram's own error rather than an Agentic Fabriq refusal — which means the answer is always current. Some metrics accept a `breakdown` (by media type, by follower status, by contact-button type). AUDIENCE DEMOGRAPHICS ARE A DIFFERENT TOOL: they need a timeframe instead of a date range.
instagram_business_get_audience_demographicsREADRead the AGGREGATE make-up of the connected account's audience — by age bracket, gender, city or country — either for its followers or for the people who engaged with it. Instagram returns counts per bucket and never an individual person. IT WITHHOLDS THE WHOLE ANSWER BELOW A PUBLISHED MINIMUM, and does so as an empty result rather than as an error: Meta does not return `follower_demographics` for an account with fewer than 100 followers, nor `engaged_audience_demographics` for an account with fewer than 100 engagements in the timeframe. An empty answer therefore does NOT mean the account has no audience, and it is not worth retrying; Agentic Fabriq labels that case in an `_af_note` field on the result. Choose a `timeframe`, not a date range: this metric is lifetime-scoped and rejects since/until.
instagram_business_get_business_discoveryREADRead another PUBLIC Instagram professional account's headline data by username — biography, website, follower count, media count, and its recent posts with their captions, permalinks and engagement counts. This is the competitor and partner read. It returns nothing for private accounts, personal accounts and age-gated accounts, and the posts it returns cannot be read individually afterwards — Instagram permits only this aggregated view. Facebook-Page connections only, and only once the app has passed Instagram Public Content Access review.
instagram_business_get_content_publishing_limitREADReport how many posts this Instagram account has already published through the API in the last 24 hours and what its ceiling is. RUN THIS BEFORE A PUBLISHING RUN. Instagram meters API publishing on a rolling 24-hour window per account, a carousel counts as one post, and once the quota is spent every publish is refused until the window rolls — an agent that cannot see its own quota burns it and then reports a provider error. The numbers come from Instagram, not from Agentic Fabriq, so they are current even when the published documentation is not. Counts against no quota itself.
instagram_business_get_hashtagREADRead a hashtag's id and canonical name from its id. Useful for confirming that a stored id still resolves before spending a lookup against the 30-per-7-days budget. Does not itself count against that budget.
instagram_business_get_mediaREADRead one published post, Reel, Story or carousel by id: caption, media type, product type, permalink, shortcode, timestamp, like and comment counts, whether commenting is enabled, and whether it is flagged as AI-generated. For a carousel this returns the album; use instagram_business_list_media_children for the individual slides. The media and thumbnail URLs are removed — see the tool description for instagram_business_list_media.
instagram_business_get_media_container_statusREADCheck whether a media container created by instagram_business_create_media_container has finished processing. FINISHED means it is ready to publish; IN_PROGRESS means wait; ERROR and EXPIRED mean start again, and the answer carries Instagram's own reason. Instagram asks that this be polled at most ONCE PER MINUTE for at most five minutes. A container expires 24 hours after it is created, so a container made yesterday cannot be published today.
instagram_business_get_media_insightsREADRead Instagram Insights for one post, Reel or Story: reach, views, likes, comments, saves, shares, reposts, total interactions, profile visits and follows, plus Reel watch time and skip rate, and Story navigation, replies and link taps. THE AVAILABLE METRICS DEPEND ON THE MEDIA TYPE — a Reel has watch-time metrics a photo does not, and Instagram reports no insights at all for a carousel's individual slides. STORY INSIGHTS ARE READABLE ONLY WHILE THE STORY IS STILL LIVE: once its 24 hours are up the data is gone, so read it before then. Unknown metric names come back as Instagram's own error, so the vocabulary stays current without an Agentic Fabriq release.
instagram_business_get_page_instagram_accountREADGiven a Facebook Page id, return the Instagram professional account linked to it. This is the id every other tool takes as ig_user_id. Only available on a connection made through Facebook Login — an Instagram-login connection has no Page and is already bound to its one account.
instagram_business_get_product_appealREADCheck whether a product Instagram rejected for shopping can be appealed, and the status of any appeal already submitted. THIS IS THE DIAGNOSTIC READ for a product that will not tag: it distinguishes 'rejected and appealable', 'appeal under review' and 'not eligible', where the tagging call itself only says no.
instagram_business_list_available_catalogsREADList the product catalogs the connected account's Instagram Shop can tag from, with each catalog's id, name, shop name and product count. START HERE for anything to do with product tags — the catalog id is what the product search takes. An empty answer means the account has no approved Instagram Shop, which is a prerequisite Instagram enforces and Agentic Fabriq cannot grant.
instagram_business_list_hashtag_recent_mediaREADRead the most recent public posts carrying one hashtag, newest first. Instagram serves only the last 24 hours here, which is what makes this the monitoring read and instagram_business_list_hashtag_top_media the research one. Posts from private and personal accounts never appear. Media URLs are removed; permalinks are kept.
instagram_business_list_hashtag_top_mediaREADRead the most popular recent public posts carrying one hashtag, with caption, permalink, timestamp and engagement counts. Instagram decides what 'top' means and returns at most about 50, from the last 24 hours for recency purposes. Posts from private accounts and personal accounts never appear. Media URLs are removed; permalinks are kept.
instagram_business_list_live_mediaREADList the connected account's live video broadcasts, including the current viewer count while one is running. Read-only: nothing in Agentic Fabriq starts, ends or comments on a live broadcast.
instagram_business_list_mediaREADList the connected account's published media newest first — posts, Reels and carousels — with caption, media type, permalink, timestamp, like and comment counts. Returns one page plus a cursor; pass it back as `after` for the next. THE MEDIA ID THIS RETURNS IS WHAT THE COMMENT, INSIGHTS, PRODUCT-TAG AND DELETE TOOLS ALL TAKE. Image and video URLs are removed and replaced with a marker; `permalink` is kept and is the link to give a human.
instagram_business_list_media_childrenREADList the individual photos and videos inside one carousel post, in order. Each slide has its own media id, which is what the insights tool needs — Instagram reports insights for the carousel as a whole and not for its slides, so this is mostly for reading captions and alt text. Returns nothing for a media object that is not a carousel.
instagram_business_list_media_collaboratorsREADList the accounts credited as collaborators on one of the connected account's posts, and whether each has accepted. Read-only. Agentic Fabriq cannot ADD a collaborator: an invitation puts the customer's content on somebody else's profile and notifies them, which is not a third party an agent gets to choose. Only available on a connection made through Facebook Login: Meta publishes no collaborators edge on the Instagram-Login API, so an Instagram-Login connection is refused locally and nothing is sent to Instagram.
instagram_business_list_media_product_tagsREADList the product tags already on one of the connected account's published posts, with each tag's product id, name, price, review status and position on the image. READ THIS BEFORE UPDATING TAGS: Meta does not document whether an update preserves tags it does not name, so this is the only way to rebuild the full set and be sure nothing was lost.
instagram_business_list_pagesREADList the Facebook Pages the connected person can manage, with each Page's id, name and category. This is the first step of finding a SECOND Instagram account on this connection: a Page id from here goes into instagram_business_get_page_instagram_account, which returns the Instagram account id. Only available on a connection made through Facebook Login. Each Page in Meta's raw answer carries a live Page access token; Agentic Fabriq removes those before returning.
instagram_business_list_recently_searched_hashtagsREADList the hashtags this account has already looked up inside the current rolling 7-day window. THIS IS THE QUOTA READ FOR HASHTAG SEARCH: Instagram allows 30 distinct hashtags per 7 days per account and gives none back, so this is how an agent sees its own budget instead of discovering it as a refusal. Every hashtag listed here can be re-queried for free.
instagram_business_list_storiesREADList the connected account's Stories that have not yet expired. Instagram keeps a Story for 24 hours and this endpoint returns only what is still up, so an empty answer means the last Story has expired rather than that none was posted. The media id returned here is what instagram_business_get_media_insights needs for Story metrics — AND STORY INSIGHTS ARE ONLY READABLE WHILE THE STORY IS LIVE.
instagram_business_list_tagged_mediaREADList other people's posts that tagged the connected account, newest first. This is the inbound half of brand monitoring and it is the read instagram_business_reply_to_mention needs: Instagram only permits a reply to a tag or @mention it can see here. Media URLs are removed; permalinks are kept.
instagram_business_publish_mediaWRITEDESTRUCTIVE — PUBLISH a staged container. The post becomes visible to the account's followers and to the public immediately, and Instagram sends its notifications at once; nothing that happens afterwards retracts a screenshot, a reshare or that notification. Read instagram_business_get_content_publishing_limit first: Instagram meters API publishing per account on a rolling 24-hour window and refuses every publish once it is spent. ON A FACEBOOK-PAGE CONNECTION this can be undone with instagram_business_delete_media; ON AN INSTAGRAM-LOGIN CONNECTION IT CANNOT — Instagram's direct login publishes no delete, so only the account holder can remove the post, in the Instagram app.
instagram_business_search_catalog_productsREADSearch one catalog for products that can be tagged, by name or SKU, returning each product's id, name, review status, price and whether it supports checkout. ONLY PRODUCTS WHOSE REVIEW STATUS IS APPROVED can be tagged on a published post, so read that field before tagging — a rejected product produces a refusal from Instagram with no explanation of which of several tags was at fault.
instagram_business_search_hashtagREADResolve a hashtag name to the id every other hashtag tool needs. INSTAGRAM METERS THIS HARD: an account may look up at most 30 DISTINCT hashtags in any rolling 7-day period, and there is no way to give one back. Re-querying a hashtag already inside the window is free, so resolve an id once and reuse it. Check instagram_business_list_recently_searched_hashtags first to see what is left. Pass the name without the leading '#'. Facebook-Page connections only, and only once the app has passed Instagram Public Content Access review.
instagram_business_update_media_product_tagsWRITEDESTRUCTIVE — set the product tags on one of the connected account's published posts. Tags become visible to shoppers immediately. Instagram allows up to 20 tags on a feed post and 30 on a Reel, and each tag on an image needs an x and y position between 0 and 1. READ instagram_business_list_media_product_tags FIRST AND SEND THE FULL SET YOU WANT: Meta's reference calls this operation "adds or modifies" without saying whether tags you omit survive, so treat it as a replacement and rebuild the list rather than sending a difference. AGENTIC FABRIQ CANNOT REMOVE A TAG: Meta publishes no delete for this edge, so a tag applied here can only be taken off in the Instagram app, or by removing the product from the catalog, which un-tags it everywhere.
Put Instagram Business behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.