Integrations
Discover connected channels, fetch each provider's settings schema, and trigger allow-listed provider tools.
Connect your agent today
Draft from chat, review in your calendar, and publish only what you approve.
Overview
The integrations:* wraps the Integrations APIs. Use it to enumerate the connected channels, inspect what each provider supports, and dispatch one-off tool calls (e.g. fetch followers, list boards).
Connect happens in the web UI
Connecting a brand-new channel still goes through the web app (OAuth redirect, or an API-key form for Dev.to — see Social integrations). Once connected, every other operation — listing, inspecting settings, triggering provider tools, deleting — is available from the CLI.
List connected channels
openquok integrations:list Filter to one channel group (customer):
openquok integrations:groups
openquok integrations:list --group <customer-group-id> Pipe through jq to extract just the identifying fields:
openquok integrations:list | jq '.[] | {id, identifier, name}' Find a specific provider by identifier:
openquok integrations:list | jq '.[] | select(.identifier=="threads")'
openquok integrations:list | jq '.[] | select(.identifier | startswith("instagram"))' Capture an integration id into a shell variable for later commands:
INTEGRATION_ID=$(openquok integrations:list
| jq -r '.[] | select(.identifier=="threads") | .id') Inspect a channel’s settings
The integrations:settings returns the rules, max post length, settings schema, and the list of allow-listed tools the channel exposes.
openquok integrations:settings <integration-id> Tip
Show only the tool list (the input for integrations:trigger):
openquok integrations:settings <integration-id>
| jq .output.tools Show the maximum content length the provider accepts:
openquok integrations:settings <integration-id>
| jq '.output.maxLength' Settings schema first
Each output.tools[] entry has a methodName (the second positional for integrations:trigger) and a dataSchema describing the JSON object it expects in -d. Validate your payload against that schema locally before scripting it into a loop.
Trigger a provider tool
The integrations:trigger dispatches a single allow-listed provider method on a connected channel. Pass JSON input with -d (alias --data). Dev.to exposes tags and organizations (no input). LinkedIn exposes company with a company URL in -d.
openquok integrations:trigger <integration-id> tags
openquok integrations:trigger <integration-id> organizations
openquok integrations:trigger <integration-id> company
-d '{"url":"https://www.linkedin.com/company/example"}' The response shape is provider-specific. Most tools return a top-level output array of entries that expose id, value, and name fields you can feed back into posts:create --providerSettingsByIntegrationId.
Discovery workflow
When working with a channel for the first time:
INTEGRATION_ID=$(openquok integrations:list
| jq -r '.[] | select(.identifier=="devto") | .id')
openquok integrations:settings "$INTEGRATION_ID" | jq '{maxLength: .output.maxLength, tools: [.output.tools[].methodName]}'
openquok integrations:trigger "$INTEGRATION_ID" tags | jq '.output[0:3]'
openquok integrations:trigger "$INTEGRATION_ID" organizations
openquok posts:create
-s "2026-01-15T12:00:00Z"
-c "Hello from a scheduled markdown article."
--settings '{"title":"Hello from OpenQuok","tags":["webdev"]}'
-i "$INTEGRATION_ID" Disconnecting a channel
The CLI does not currently expose an integrations:delete due to accidental delete by AI. Disconnect a channel from the web UI, or call the underlying DELETE /public/integrations/{id} endpoint via the SDK — see Delete Channel.
Removing a channel is destructive
Once an integration row is deleted, any scheduled post that targeted it fails at publish time with integration_not_found.