Skip to content

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.

4 min read

Connect your agent today

Draft from chat, review in your calendar, and publish only what you approve.

Start for $0

Terminology: Channel vs integration

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

ProviderIdentifierConnectSetup guide
Meta ThreadsthreadsGET /api/v1/public/social/threadsThreads
XxGET /api/v1/public/social/xX
LinkedInlinkedinGET /api/v1/public/social/linkedinLinkedIn
LinkedIn Pagelinkedin-pageGET /api/v1/public/social/linkedin-pageLinkedIn Page
Facebook PagefacebookGET /api/v1/public/social/facebookFacebook
Instagram (Business, FB-linked)instagram-businessGET /api/v1/public/social/instagram-businessInstagram
Instagram (Standalone, IG Login)instagram-standaloneGET /api/v1/public/social/instagram-standaloneInstagram
YouTubeyoutubeGET /api/v1/public/social/youtubeYouTube
TikToktiktokGET /api/v1/public/social/tiktokTikTok
Dev.todevtoDashboard API key — not GET /api/v1/public/social/devtoDev.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.

Character limits, media requirements, and composer rules for each network are summarized in Platform limits.

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.

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.

Search documentation
Find a docs page
Discord Support