Tutorials

How to Build a Meta Muse Connector for X Posting

Taras Shynkarenko
Taras Shynkarenko
Updated: 7 min read
How to build a Meta Muse connector for X postingHow to build a Meta Muse connector for X posting

TL;DR, Quick Answer

7 min read

Meta lists no X connector for Muse, and X belongs to a Meta competitor, so the route in is a Custom Connector built from the public AdaptlyPost OpenAPI spec. The field Muse must send is twitterConnectionIds, confirmed in the spec on 20 September 2026. An X thread is a sequence of timed posts through the bulk endpoint, and Bluesky rides along in the same call.

Meta lists no X connector at all, so a Meta Muse connector for X posting is one you build yourself in a single message. Muse writes its own client from a public API spec on its cloud virtual machine, which means the work is a paste, a token and one field name the agent gets wrong if nobody tells it. That field is twitterConnectionIds, and the AdaptlyPost spec still confirmed it on 20 September 2026.

The short version: hand Muse the spec at post.adaptlypost.com/post/api/v1/openapi.json, paste an adaptly_ token into the secure credential prompt, and tell it the X field is twitterConnectionIds with platform enum TWITTER. Then schedule threads by the sentence.

Why is there no Meta Muse connector for X in Meta's list?

As of 20 September 2026 Meta publishes no connector directory outside the product, and X appears in none of the partial lists that exist. Chief AI Officer Alexandr Wang posted a roster on 8 September 2026 covering Gmail, Google Calendar, Outlook, Plaid, OpenTable, Google Docs, Spotify, Function Health, Withings, Tailscale and Peloton, plus Facebook, Instagram, Threads and Messenger. Parallel's launch roster of 14 September 2026 names a partly different set again, adding Ticketmaster and Apple Health and dropping Outlook, Google Docs, Withings, Tailscale and Messenger. Neither list names X.

There is a second layer here worth stating as the commercial fact it is. X belongs to a Meta competitor, and Threads is Meta's own short-form network, the one that connects to Muse automatically when the accounts share an Accounts Centre. As of 20 September 2026 Meta has announced no connector that publishes to a rival timeline.

So X goes through a Custom Connector, which is Meta's documented answer for a service not in the list: Muse retrieves the API information and writes the client itself. Meta also states plainly that it does not review custom connectors or how they use your information. The full setup, credential flow and VM mechanics sit in the pillar guide. This post is the X half.

What do I paste into Muse to build the X connector?

The paste is the pillar's paste plus one line. The spec URL, setup brief, auth header and credential-prompt rule are all in the pillar guide. The X delta is the last instruction:

Build a custom connector for AdaptlyPost so you can post to X, following the
setup in the pillar paste.
 
Do not publish anything yet. Call GET /social-accounts, show me the X handle
you can post as, and confirm from the spec that the X field is
twitterConnectionIds and the platform enum value is TWITTER.
The X step the pillar does not cover
1
Do the pillar setup first. Token, paste and credential prompt are in the pillar guide.
2
Make it read back the X handle. GET /social-accounts returns the connection ID and the handle attached to it.
Step 2 is the one to insist on. Posting as the wrong handle is the X mistake that is hardest to walk back.

Why does the AdaptlyPost spec still say twitterConnectionIds?

The field is twitterConnectionIds because the spec froze the name before the rebrand, and the Grok bot template post explains why it stayed. What matters for Muse is narrower: an agent that reads the spec sends the right field, and an agent that reasons from the brand name does not. The AdaptlyPost spec was re-fetched on 20 September 2026 to confirm it: twitterConnectionIds is in the request schema, the platform enum value is TWITTER, and xConnectionIds appears nowhere in the document.

An agent improvising from the brand name invents xConnectionIds. The spec defines no such field, so nothing in the request points at an X connection and the post goes out without an X target.

What Muse must send for X
What an agent guesses
  • xConnectionIds
  • platforms: [X_TWITTER]
  • No such field in the spec, post never reaches X
What the spec defines
  • twitterConnectionIds
  • platforms: [TWITTER]
  • Post lands on the timeline
The right column is what the live spec defined when it was re-fetched on 20 September 2026. The left column is what a connector produces when nobody pins the field, and neither value appears anywhere in the document.

A person typing at a laptop on a desk, planning a scheduled sequence of posts one after another.

Can Muse schedule an X thread?

Muse schedules a thread as a sequence of timed posts through POST /social-posts/bulk, spaced by scheduledAt. AdaptlyPost has no thread object, so nothing chains the replies for you. Say that to Muse up front, because an agent asked for a twelve-part thread will otherwise describe reply-chaining it cannot do.

The bulk endpoint takes 1 to 100 posts in one call. platforms, timezone and the connection ID arrays sit once at the top of the request; each entry in posts carries its own contentType, text and scheduledAt. Spacing is what you wanted anyway. A thread dumped at once reads as a dump; the same posts two minutes apart read as a thread being written.

You:  Schedule a 4-part thread on the connector launch, from 9am,
      two minutes apart, X only.
 
Muse: POST /social-posts/bulk
        { platforms: ["TWITTER"],
          twitterConnectionIds: ["..."],
          timezone: "Europe/Kyiv",
          posts: [
            { contentType: "TEXT", text: "1/ ...", scheduledAt: "2026-09-22T09:00:00" },
            { contentType: "TEXT", text: "2/ ...", scheduledAt: "2026-09-22T09:02:00" },
            { contentType: "TEXT", text: "3/ ...", scheduledAt: "2026-09-22T09:04:00" },
            { contentType: "TEXT", text: "4/ ...", scheduledAt: "2026-09-22T09:06:00" } ] }

One Muse detail applies here and not to other agents. Sentinel, the component that authorises every outbound request from the VM, creates a pending approval and stops execution when it wants you. Meta's approval prompt offers Allow once, Allow for this task, Allow for this site, Always allow and Deny. For a thread, Allow for this task is the option that does not make you tap four times.

How do X and Bluesky share one call?

As of 20 September 2026 the spec defines per-platform config objects for five networks only: Pinterest, TikTok, Instagram, Facebook and YouTube. X, Bluesky, LinkedIn and Threads take a connection ID array, text and optional media, and nothing else. X takes twitterConnectionIds, Bluesky takes blueskyConnectionIds, so putting both in one request adds two arrays and no config block.

Use platformTexts rather than one shared string when you publish to both at once. Each entry is a platform and a text, so the same idea gets a version written to each timeline instead of one caption trimmed to the tighter of the two. AdaptlyPost sets no maximum length on text in the spec, so each network applies its own limit to the text it receives.

A close-up of a broken metal chain link, standing for a scheduled post that fails when a connection lapses.

AdaptlyPost
AdaptlyPost

Start 7-Day FREE Trial

All-platform analytics

Social Inbox

AI-powered assistant

What breaks on X specifically?

An expired or revoked X connection fails at publish time, not at schedule time. A thread booked for next Tuesday is accepted today, the connection lapses in between, and the post fails on the day with nothing in the original response to warn you. GET /social-posts/{id}/results reports the outcome per platform and POST /social-posts/{id}/retry reruns only the failures once you reconnect.

Muse makes that worse if you let it. The connector reports what the scheduling call returned, so Muse will tell you the thread is booked and consider the job done. Put the results call in the saved skill, so checking outcomes is part of publishing rather than something you remember to ask for.

Two more, neither unique to X but both sharper there. Media needs the POST /upload-urls round trip before POST /social-posts, and X video goes up through an initialize, append and finalize sequence that takes longer than an image. AdaptlyPost counts its own rate limits per API key and returns them on every response as RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset, with Retry-After on a 429. Tell Muse to read those headers between bulk calls instead of pacing a batch by guesswork.

How a scheduled X thread fails
1
Book. Muse schedules the thread through the bulk endpoint and the API accepts it.
2
Lapse. The X connection expires or is revoked before the thread is due.
3
Fail. The post fails on the day, with nothing in the original response to warn you.
4
Check. GET /social-posts/{id}/results reports the outcome per platform.
5
Retry. Reconnect, then POST /social-posts/{id}/retry reruns only the failures.
Muse reports the booking as done, so the results call belongs in the saved skill.

Frequently Asked Questions

Can Muse post to X without a connector at all?

Muse can drive the X web app with its browser sub-agent, which reads an accessibility tree snapshot rather than the raw DOM and cannot run JavaScript in the page. It works until a button moves. There is no per-platform error to retry against and no schedule, so a connector against a published spec is the better trade for anything timed.

Can the connector read my mentions or replies on X?

No. Reading mentions needs X's own API, which the AdaptlyPost spec does not wrap. A Muse connector built on this spec publishes, reports the outcome per platform and can read the /analytics/* endpoints, but the spec defines no endpoint for a mentions or replies timeline.

Does the connector work with an X Premium account?

Yes. The spec sets no maxLength on text, so nothing in the schema rejects a Premium-length post, and X applies whatever limit your account carries. Write the long version in platformTexts for TWITTER and a short version for the other networks in the same call.

How is this different from the Grok bot route?

The Grok bot template for X posting is a share link that installs a pre-built configuration, so the API knowledge arrives with the template. Meta's connectors, approvals and privacy help pages describe no template or share-link mechanism for Muse as of 20 September 2026. Muse reads the spec and writes the client itself, then saves the result as a reusable skill that persists across conversations.

Does the token limit which X account Muse posts as?

No. The X handle is chosen by the connection ID you put in twitterConnectionIds, not by the token. Call GET /social-accounts and read the handle back before the first publish. The credential prompt and revocation flow are in the pillar guide.

How many X posts can one bulk call schedule?

POST /social-posts/bulk takes 1 to 100 posts in one call. Platforms, timezone and the connection ID arrays sit once at the top of the request, and each post carries its own contentType, text and scheduledAt.

What field does Muse use to add Bluesky to the same request?

Bluesky takes blueskyConnectionIds, next to twitterConnectionIds for X. The spec defines no config block for either network, so the request only gains a second array.

What happens if my X connection expires before a scheduled post?

The post fails at publish time, not at schedule time, and the original response gives no warning. GET /social-posts/{id}/results shows the outcome per platform. Once you reconnect, POST /social-posts/{id}/retry reruns only the failures.

How do I avoid approving every post in a thread?

Pick Allow for this task in Meta's approval prompt. Sentinel authorises every outbound request from the VM, and that option covers the whole run instead of asking once per post. The other choices are Allow once, Allow for this site, Always allow and Deny.

Does Meta review a custom connector for X?

No. Meta states that it does not review custom connectors or how they use your information. Read the X handle back with GET /social-accounts before the first publish.

Create an AdaptlyPost API token and hand Muse the spec, or read the agent setup brief first. API access is included on Creator at $19 a month, Pro at $39 and Enterprise at $89, and on the 7-day trial.

Sources: Meta's Muse connectors help article, Meta's safety engineering post, Parallel's custom integrations write-up (14 September 2026), and the AdaptlyPost OpenAPI spec. Checked 20 September 2026.

AdaptlyPost
AdaptlyPost

Start 7-Day FREE Trial

All-platform analytics

Social Inbox

AI-powered assistant

Was This Article Helpful?

Let us know what you think!

See us more often in Google

One click marks AdaptlyPost as a preferred source, so our articles sit higher in your Top Stories, AI Mode, and AI Overviews.

Before you go...

AdaptlyPost

AdaptlyPost

Schedule your content across all platforms

Manage all your social media accounts in one place with AdaptlyPost.

All-platform analytics

Social Inbox

AI-powered assistant

Related Articles