Social Accounts
List the social accounts connected to your login, so a script or an agent can point a Social Publish node at them without opening the app.
A Social Publish node posts to accounts by id, in config.accounts. This endpoint lists those ids, so a script or an agent holding an API key can target an account without opening the app.
List connected accounts
GET /api/v1/social/accounts
Scope: social:read. A full-access (*) key has it. None of the workflow scopes (workflows:read, workflows:write, workflows:execute, templates:execute) include it, so a key that builds or runs workflows needs social:read added to list accounts. A key without it gets 401, like every other endpoint. There are no parameters.
curl https://www.wireflow.ai/api/v1/social/accounts \
-H "Authorization: Bearer $WIREFLOW_API_KEY"
{
"data": {
"count": 2,
"accounts": [
{
"id": "native:cm1yt4k2",
"platform": "youtube",
"handle": "@mychannel",
"displayName": "My Channel",
"publishable": true,
"analytics": "unsupported",
"options": [
{
"name": "caption",
"kind": "longtext",
"description": "Caption for this platform instead of the default one."
},
{
"name": "title",
"kind": "text",
"description": "Video title, up to 100 characters. Defaults to the caption."
},
{
"name": "privacy",
"kind": "enum",
"description": "public, unlisted or private.",
"values": ["private", "unlisted", "public"]
},
{
"name": "scheduledPublishAt",
"kind": "datetime",
"description": "ISO 8601 time the platform makes the post public. Private until then; a time already past means public now."
},
{
"name": "tags",
"kind": "csv",
"description": "Tags as ONE comma-separated string, e.g. \"ai, video\", or a list of strings, e.g. [\"ai\", \"video\"]. YouTube keeps 500 characters of tags in total (commas count, and a tag with a space counts two more): the first tags that fit are kept and the rest are dropped."
},
{
"name": "thumbnailUrl",
"kind": "url",
"description": "Public https URL of a custom thumbnail. Needs a verified channel."
}
]
},
{
"id": "native:cm1th9x7",
"platform": "threads",
"handle": "@me",
"displayName": "Me",
"publishable": true,
"analytics": "unsupported",
"options": [
{
"name": "caption",
"kind": "longtext",
"description": "Caption for this platform instead of the default one."
},
{
"name": "altText",
"kind": "longtext",
"description": "Image description for screen readers, used for every image."
}
]
}
]
}
}
This is the same payload the MCP list_social_accounts tool returns, under data. The permission differs: the MCP tool needs the opt-in social:publish grant (off by default, and only the account owner can tick it), while this endpoint needs the social:read API key scope.
| Field | Meaning |
|---|---|
id |
What goes in a node's config.accounts, or in the MCP publish_post tool's accountIds. Always starts with native:. |
platform |
youtube, threads, instagram, tiktok, linkedin, bluesky or mastodon. |
handle, displayName |
As the platform shows them. |
publishable |
false means the connection has to be re-authorized in the Wireflow app before it can post. |
analytics |
enabled, unsupported on that platform, or reconnect_required, in which case an analyticsNote says what to do. |
options |
The options you can set for this account under config.perPlatformOverrides.<platform>, each with its kind and, for an enum, its values. |
With nothing connected you get count: 0, an empty accounts list and a note, not an error.
What it covers
- Only your own accounts. A connection belongs to one login, so there is no team scope and no parameter that picks one.
- Its own scope on purpose. The ids are what a Social Publish node posts to, so
workflows:read, the default for a new key, does not list them. - No tokens. A token, a refresh token or any other secret is never part of the response.
- Listing only. The account owner connects or reconnects an account, in a Social Publish node or from a connect link an agent asks for (the Social Publish page says how), and it shows up here on the next call. Posting is the Social Publish node, or the MCP
publish_posttool, which needs its ownsocial:publishpermission.
Point a node at an account
{
"config": {
"accounts": ["native:cm1yt4k2"],
"perPlatformOverrides": {
"youtube": { "title": "How it was made", "privacy": "unlisted" }
}
}
}
The keys each platform reads are on the Social Publish page.