Threads Settings
OpenQuok public API provider settings for Meta Threads — 500-character cap, follow-up replies, thread finisher, internal plugs, and cross-account comments.
Connect your agent today
Draft from chat, review in your calendar, and publish only what you approve.
Quick reference
| Property | Value |
|---|---|
| Identifier | threads |
| Connect | GET /api/v1/public/social/threads |
| Setup guide | Meta Threads |
| Character cap | 500 (main caption, follow-ups, finisher, plug text) |
| Main-post media | Text-only OK; one image or video, or a carousel |
Note
Keys in providerSettingsByIntegrationId use the channel UUID from GET /api/v1/public/integrations — not the threads identifier. See the Provider settings overview for terminology.
Settings on create post
Pass per-channel options under providerSettingsByIntegrationId[<integration-id>]. Threads-specific keys nest in the threads composer bucket. The worker reads threads.replies, finisher fields, and plug objects from that bucket at publish time.
Flat vs nested: Threads follow-ups, finisher, and plugs use the nested threads.* bucket only — there are no flat CLI aliases for reply chains.
{
"providerSettingsByIntegrationId": {
"<threads-integration-id>": {
"threads": {
"replies": [
{ "message": "Part 2", "delaySeconds": 60 }
],
"enabled": true,
"message": "Thanks for reading!",
"internalEngagementPlug": {
"enabled": true,
"message": "Link in bio.",
"delaySeconds": 300
},
"crossAccountPlugs": [
{
"plugName": "threads-cross-account-comment",
"enabled": true,
"delayMs": 120000,
"integrationIds": ["<other-threads-integration-id>"],
"fields": { "comment": "Great thread!" }
}
]
}
}
}
} Field reference
| Field | Type | Required | Notes |
|---|---|---|---|
| threads.replies | array | No | Follow-up thread replies after the root post publishes |
| threads.replies[].message | string | Yes (per row) | Reply text; counts toward the 500-character cap |
| threads.replies[].delaySeconds | number | Yes (per row) | Wait after the previous part publishes (0 = immediately after prior step) |
| threads.replies[].media | array | No | Optional image or video per reply — upload first via POST /api/v1/public/upload |
| threads.enabled | boolean | No | Enable thread finisher (default off) |
| threads.message | string | When finisher enabled | Closing reply after all follow-ups complete |
| threads.internalEngagementPlug.enabled | boolean | No | Same-account delayed engagement reply |
| threads.internalEngagementPlug.message | string | When plug enabled | Plug reply text |
| threads.internalEngagementPlug.delaySeconds | number | No | Seconds after follow-ups + finisher (default varies by composer) |
| threads.crossAccountPlugs | array | No | Comments from other Threads channels in the workspace |
Follow-up comments
Scheduled same-account thread replies live in threads.replies. Each row needs message and delaySeconds. Optional media uses the same { id, path } shape as the main post.
Tip
Every text field — main body, each reply, finisher, and plug comment — must stay within 500 characters when status is scheduled. Use draft to store longer copy until you shorten it.
Internal plugs
Internal plugs run on the publishing channel after follow-ups and the thread finisher complete. Configure threads.internalEngagementPlug on the same providerSettingsByIntegrationId entry as the main post.
See Internal plugs for how internal plugs differ from global channel rules.
Cross-account plugs
After the main thread publishes, other connected Threads channels in your workspace can post a comment via threads.crossAccountPlugs:
| Plug id | Action |
|---|---|
| threads-cross-account-comment | Comment from acting Threads channels (fields.comment) |
Each entry needs plugName, integrationIds (acting channels — not the publisher), and optional delayMs. Acting channels need the threads_manage_mentions scope. See Cross-account plugs.
Complete example
Schedule a text post with two follow-up replies:
curl -X POST https://api.openquok.com/api/v1/public/posts
-H "Authorization: Bearer opo_your_programmatic_token"
-H "Content-Type: application/json"
-d '{
"body": "Big thread incoming",
"scheduledAt": "2026-05-15T10:00:00.000Z",
"status": "scheduled",
"integrationIds": ["<threads-integration-id>"],
"isGlobal": true,
"providerSettingsByIntegrationId": {
"<threads-integration-id>": {
"threads": {
"replies": [
{ "message": "1/ here is the actual hot take", "delaySeconds": 60 },
{ "message": "2/ and here is the receipt", "delaySeconds": 300 }
]
}
}
}
}'