cross_post
What it does
One trigger, every platform. Reads workspace_integrations, fans out one schedule_post per enabled integration, threading the same caption + hashtags through.
If caption / hashtags are omitted, the tool auto-picks the most recent generate_variants output (caption with angle emotional, first hashtag set) and falls back to the content title.
Input schema
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | required | — |
Content id (Approvato + VF asset). |
| caption | string | optional | auto |
Auto-picks from generate_variants output when omitted. |
| hashtags | array<string> | optional | auto |
Auto-picks first hashtag set when omitted. |
| publish_at_unix | number | optional | now |
Schedule timestamp. Omit for immediate publish. |
| platforms | array<string> | optional | all enabled |
Explicit allowlist. Omit to publish to every enabled integration. |
| include_disabled | boolean | optional | false |
Include integrations with enabled=0 (dry-run audit mode). |
Example call
json{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "cross_post", "arguments": { "id": "c_abc123", "caption": "Same drink, three platforms.", "hashtags": ["#coffee", "#bts"] } } }
Response shape
json{ "ok": true, "content_id": "c_abc123", "platforms_targeted": 3, "success_count": 3, "fail_count": 0, "schedule_mode": "immediate", "caption_used": "Same drink, three platforms.", "hashtags_used": ["#coffee", "#bts"], "results": [ { "platform": "instagram", "status": "published", "post_id": "post_a1...", "published_url": "https://www.instagram.com/p/.../", "duration_ms": 8420 }, { "platform": "youtube", "status": "published", "post_id": "post_b2...", "published_url": "https://www.youtube.com/watch?v=...", "duration_ms": 14210 } ], "notes": [ "Cross-posted to 3 platform(s) successfully." ] }
Usage from Claude Desktop
prompt"Cross-post c_abc123 everywhere we're connected, right now."
Usage from Python
pythonimport requests LUMIQA = "https://lumiqa.io/mcp/your-slug" HEADERS = {"Authorization": "Bearer lk_live_xxxxxxxxxxxx"} r = requests.post(LUMIQA, headers=HEADERS, json={ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "cross_post", "arguments": {"id": "c_abc123"} }, }) print(r.json())
Usage from Node
javascriptconst r = await fetch("https://lumiqa.io/mcp/your-slug", { method: "POST", headers: { "Authorization": "Bearer lk_live_xxxxxxxxxxxx", "Content-Type": "application/json", }, body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "tools/call", params: { name: "cross_post", arguments: { id: "c_abc123" }, }, }), }); const data = await r.json(); console.log(data);
Required env vars / integrations
- At least one row in
workspace_integrationswithenabled=1. - Inherits all the secrets that
schedule_postneeds.
Known limitations
- Captions are truncated per-platform to each platform's hard limit (Instagram 2200, Facebook 63206, TikTok 2200, YouTube 5000, LinkedIn 3000).
- Hashtags are clamped to platform max (15 on YouTube, 30 elsewhere).
- If every platform succeeds and publish is immediate, the content flips to
Postatoautomatically. - A single failure leaves
ok: false— partial successes are still recorded.