Overview — Provider settings
Per-channel providerSettingsByIntegrationId shapes for every social integration OpenQuok ships on the public API — identifiers, connect paths, and links to field-level reference pages.
Connect your agent today
Draft from chat, review in your calendar, and publish only what you approve.
Terminology: Channel vs integration
Note
The OpenQuok UI/dashboard uses the term channel, while the API and SDK use integration. They refer to the same thing — a single connected social account inside a workspace.
Overview
OpenQuok ships social provider integrations behind a single create-post API. Each post payload identifies its target channels through the UUIDs in integrationIds, and any per-channel tuning lives under providerSettingsByIntegrationId keyed by those same UUIDs.
Customize-mode captions and attachments use bodiesByIntegrationId and mediaByIntegrationId respectively. For how the dashboard maps Global mode and per-channel content to those fields, see Global vs per-channel.
OAuth channels use the provider short identifier (for example threads) at connect time, when you tell Connect Channel which platform to authorize. Credentials channels (Dev.to) are connected in the dashboard with an API key — GET /api/v1/public/social/devto returns 400 and is not a connect URL.Each provider page below documents the JSON shape under providerSettingsByIntegrationId[<uuid>] for that network — flat CLI keys, nested composer buckets, follow-up replies, and plugs where supported.
Provider catalog
| Provider | Identifier | Connect | Setup guide |
|---|---|---|---|
| Meta Threads | threads | GET /api/v1/public/social/threads | Threads |
| X | x | GET /api/v1/public/social/x | X |
| GET /api/v1/public/social/linkedin | |||
| LinkedIn Page | linkedin-page | GET /api/v1/public/social/linkedin-page | LinkedIn Page |
| Facebook Page | GET /api/v1/public/social/facebook | ||
| Instagram (Business, FB-linked) | instagram-business | GET /api/v1/public/social/instagram-business | |
| Instagram (Standalone, IG Login) | instagram-standalone | GET /api/v1/public/social/instagram-standalone | |
| YouTube | youtube | GET /api/v1/public/social/youtube | YouTube |
| TikTok | tiktok | GET /api/v1/public/social/tiktok | TikTok |
| Dev.to | devto | Dashboard API key — not GET /api/v1/public/social/devto | Dev.to |
The Identifier column matches the identifier field returned by Channel settings & tools for each connected channel. For OAuth providers it also matches the :integration path parameter on Connect Channel (OAuth).
When you reference a channel inside a post payload, use the channel’s UUID — not its short identifier — in integrationIds and as the keys of providerSettingsByIntegrationId.
Note
The provider catalog is sourced from backend/integrations/integrationManager.ts. Re-fetching GET /api/v1/public/integrations is the safest way to see what's available in any given OpenQuok deployment.
Character limits, media requirements, and composer rules for each network are summarized in Platform limits.
Tip
Rather than memorizing field names, fill out a real post in the Payload Wizard, click Copy scheduled payload, and inspect the providerSettingsByIntegrationId object — it is always the source of truth for what the backend currently accepts (and the cleanest way to spot the difference between platform-specific settings and cross-provider features like Follow-up comments).
Provider settings reference
Plugs and follow-up comments
Some optional features apply across multiple providers without being a single-network setting. They still live on providerSettingsByIntegrationId[<channel-uuid>] for the publishing channel.
- Follow-up comments — same-account replies or comments after the main post publishes. Bucket keys differ per platform (for example threads.replies or instagram.replies). Field tables and JSON examples are on each provider page that supports them.
- Internal plugs — same-account engagement after follow-ups complete. See Internal plugs and Threads Settings → Internal plugs.
- Cross-account plugs — comments or reposts from other connected channels in your workspace. See Cross-account plugs and the Threads, X, and LinkedIn provider pages for catalog plug ids and example payloads.
Note
Global plugs (auto-repost or auto-reply when likes cross a threshold) are channel-level rules — not part of the create-post payload. Configure them with GET /public/plug-catalog and POST /public/integration-plugs/:id, or via openquok plugs:* commands. See Public API → Plugs.
Multi-channel examples
All examples target POST /api/v1/public/posts, sent with the Authorization header described in Authentication. Replace each YOUR_..._UUID placeholder with a real channel UUID from GET /api/v1/public/integrations.
Per-channel body override
{
"body": "Same announcement everywhere.",
"bodiesByIntegrationId": {
"YOUR_INSTAGRAM_CHANNEL_UUID": "Same announcement everywhere — but with #hashtags for the gram"
},
"scheduledAt": "2026-05-15T18:00:00.000Z",
"status": "scheduled",
"integrationIds": ["YOUR_THREADS_CHANNEL_UUID", "YOUR_INSTAGRAM_CHANNEL_UUID"],
"isGlobal": false
} When isGlobal is false, channels listed in bodiesByIntegrationId use their override; the rest fall back to the top-level body.
Per-channel media override
Upload each asset first, then pass shared defaults in media and channel-specific lists in mediaByIntegrationId:
{
"body": "Same announcement everywhere.",
"scheduledAt": "2026-05-15T18:00:00.000Z",
"status": "scheduled",
"integrationIds": ["YOUR_THREADS_CHANNEL_UUID", "YOUR_INSTAGRAM_CHANNEL_UUID"],
"isGlobal": false,
"media": [{ "id": "img-global", "path": "FILE_PATH_FROM_UPLOAD" }],
"mediaByIntegrationId": {
"YOUR_THREADS_CHANNEL_UUID": [{ "id": "img-threads", "path": "THREADS_FILE_PATH" }],
"YOUR_INSTAGRAM_CHANNEL_UUID": [{ "id": "img-ig", "path": "INSTAGRAM_FILE_PATH" }]
}
} Channels omitted from mediaByIntegrationId inherit the top-level media array for their post row.