{"id":"94f3247e-3fa3-4136-8a2d-2afea3624da7","entityType":"agent","slug":"clawhub-codivion-codivupload-social-manager","name":"CodivUpload Social Manager","canonicalUrl":"https://www.xpersona.co/agent/clawhub-codivion-codivupload-social-manager","canonicalPath":"/agent/clawhub-codivion-codivupload-social-manager","generatedAt":"2026-10-10T23:45:23.331Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T19:49:55.404Z","emptyReason":null},"description":"Social media scheduler, cross-poster, and content calendar for OpenClaw. Schedule social media posts, publish content, cross-post to multiple platforms, auto...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.3K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17a7jffmv06yefftdybh76j0n8676yd:codivupload-social-manager","sourceUrl":"https://clawhub.ai/codivion/codivupload-social-manager","homepage":"https://clawhub.ai/codivion/skills/codivupload-social-manager","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/codivion/codivupload-social-manager","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/codivion/skills/codivupload-social-manager","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":62,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"CodivUpload Social Manager technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T19:49:55.404Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T19:49:55.404Z","emptyReason":null},"stars":null,"forks":null,"downloads":1275,"packageName":null,"latestVersion":"1.0.17","tractionLabel":"1.3K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T19:49:55.404Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T19:49:55.404Z","lastCrawledAt":"2026-10-10T19:49:55.404Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T19:49:55.404Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.17","createdAt":"2026-05-28T00:42:01.044Z","changelog":"Social media manager skill for OpenClaw — schedule, cross-post, and manage content across 7+ launched platforms (YouTube, Instagram, X, Facebook, TikTok, Threads, Pinterest). Requires CODIVUPLOAD_API_KEY (declared in frontmatter). All publishing actions are confirmation-gated. Optional pinned MCP server. Presigned upload flow for files up to 5GB. Runtime artifact contains SKILL.md + README.md only — developer publishing helpers are excluded.","fileCount":4,"zipByteSize":29443},{"version":"1.0.16","createdAt":"2026-05-07T10:38:33.226Z","changelog":"Keyword-density rewrite of the frontmatter description for ClawHub vector-search ranking. Baseline audit of v1.0.15 showed we were absent from top 5 on every category-level query (social media manager, social media scheduling, schedule social media, cross-post, youtube scheduler, instagram scheduler, tiktok automation, mcp social media, buffer alternative). Description now leads with 'Social media scheduler, cross-poster, content calendar for OpenClaw' and adds an explicit natural-language paragraph (post to YouTube, post to Instagram, post to X, tweet scheduler, etc) covering the queries we were missing. Body of SKILL.md, README.md, and metadata fields untouched.","fileCount":3,"zipByteSize":26659},{"version":"1.0.15","createdAt":"2026-05-07T10:27:58.364Z","changelog":"Scrub internal architecture leaks. Removed mention of internal repo path (frontend/src/config/plans.ts), infrastructure names (Cloudflare R2, Vercel, FFmpeg, VPS) — replaced with neutral terms (storage backend, managed live stream relay, presigned URL). Tightened MIT phrasing to refer only to the skill artifact (the product is closed-source SaaS). Added UTM tags to remaining links (Related section docs, Support docs). Pre-publish audit checklist now in agent memory to prevent recurrence.","fileCount":3,"zipByteSize":26183},{"version":"1.0.14","createdAt":"2026-05-07T10:22:19.509Z","changelog":"Reframe Free plan as an inviting first stop. v1.0.13 was correct on the truth (Starter required for API) but dismissive of Free. Now: hero CTA reads 'Start free, upgrade when you want the agent to do it for you' with full Free dashboard description (10 uploads/mo, calendar, AI captions, all 7+ platforms, no credit card), then Starter upgrade path. Step 1 split into two paragraphs — try Free dashboard first, upgrade to Starter when ready for the agent. LLM gets a verbatim upgrade-conversation script. Funnel: Free signup → dashboard try → 'I want the agent to do this' → Starter conversion.","fileCount":3,"zipByteSize":26099},{"version":"1.0.13","createdAt":"2026-05-07T10:20:31.725Z","changelog":"Honesty pass on pricing positioning. Free plan is dashboard-only and does NOT include API access — prior versions implied users could run this skill on Free, which was wrong. New positioning: Free ($0, no credit card) = dashboard-only; this skill requires Starter ($20/mo or $200/yr with 2 months free) since it calls the REST API. Hero, Step 1 of setup, comparison table, and Configuration section all corrected. Tier ladder enumeration removed in favor of /pricing link per Codivion request.","fileCount":3,"zipByteSize":25857},{"version":"1.0.12","createdAt":"2026-05-07T10:16:45.228Z","changelog":"Conversion-tracking pass: UTM-tag every user-clickable codivupload.com link (utm_source=clawhub, utm_medium=skill, utm_campaign=openclaw-onboarding, utm_content per location) so GA4 can split funnel stages — first ClawHub install volume came in (~80 installs, 0 signups so far) but we couldn't measure where the dropoff was. Step 3 URL corrected: removed non-existent app.codivupload.com/en/connect; connection actually happens on the profile detail screen. README hero gains a stronger 'Get a free API key' badge, a no-credit-card pricing callout, and a 'Try this on day 1' section with 4 concrete prompts users can paste once setup is complete.","fileCount":3,"zipByteSize":25409},{"version":"1.0.11","createdAt":"2026-05-07T08:55:40.091Z","changelog":"Information architecture: trim frontmatter description's safety paragraph (no detail removed — moved to SKILL.md body where users read it in context). Description now leads with product purpose + a 5-step setup flow + recommended scope + MCP pin. The full action gate framing, scope tier ladder, and OpenClaw approval-prompt workflow guidance remain in the body unchanged. Goal: make the registry summary card on ClawHub easier to scan + reduce ClawScan pattern-matching on the action enumeration that previously elevated Tool Misuse to HIGH/Concern.","fileCount":3,"zipByteSize":24677},{"version":"1.0.10","createdAt":"2026-05-07T07:57:15.290Z","changelog":"Fix: replace cdv_paste_the_key_here placeholder with <YOUR_CODIVUPLOAD_API_KEY> (angle-bracket template syntax). v1.0.9 was flagged suspicious.exposed_secret_literal because the scanner regex matched the literal placeholder as a real API key. Functionality unchanged — Getting Started 6-step flow added in v1.0.9 still present in full.","fileCount":3,"zipByteSize":24901}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17a7jffmv06yefftdybh76j0n8676yd:codivupload-social-manager","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17a7jffmv06yefftdybh76j0n8676yd:codivupload-social-manager` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/codivion/codivupload-social-manager before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-codivion-codivupload-social-manager/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-codivion-codivupload-social-manager/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-codivion-codivupload-social-manager/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-codivion-codivupload-social-manager/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-codivion-codivupload-social-manager/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-codivion-codivupload-social-manager/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T23:45:23.327Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-codivion-codivupload-social-manager/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-codivion-codivupload-social-manager/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-codivion-codivupload-social-manager/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-codivion-codivupload-social-manager/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T19:49:55.404Z","emptyReason":null},"readme":"Skill: CodivUpload Social Manager\n\nOwner: codivion\n\nSummary: Social media scheduler, cross-poster, and content calendar for OpenClaw. Schedule social media posts, publish content, cross-post to multiple platforms, auto...\n\nTags: latest:1.0.17\n\nVersion history:\n\nv1.0.17 | 2026-05-28T00:42:01.044Z | user\n\nSocial media manager skill for OpenClaw — schedule, cross-post, and manage content across 7+ launched platforms (YouTube, Instagram, X, Facebook, TikTok, Threads, Pinterest). Requires CODIVUPLOAD_API_KEY (declared in frontmatter). All publishing actions are confirmation-gated. Optional pinned MCP server. Presigned upload flow for files up to 5GB. Runtime artifact contains SKILL.md + README.md only — developer publishing helpers are excluded.\n\nv1.0.16 | 2026-05-07T10:38:33.226Z | user\n\nKeyword-density rewrite of the frontmatter description for ClawHub vector-search ranking. Baseline audit of v1.0.15 showed we were absent from top 5 on every category-level query (social media manager, social media scheduling, schedule social media, cross-post, youtube scheduler, instagram scheduler, tiktok automation, mcp social media, buffer alternative). Description now leads with 'Social media scheduler, cross-poster, content calendar for OpenClaw' and adds an explicit natural-language paragraph (post to YouTube, post to Instagram, post to X, tweet scheduler, etc) covering the queries we were missing. Body of SKILL.md, README.md, and metadata fields untouched.\n\nv1.0.15 | 2026-05-07T10:27:58.364Z | user\n\nScrub internal architecture leaks. Removed mention of internal repo path (frontend/src/config/plans.ts), infrastructure names (Cloudflare R2, Vercel, FFmpeg, VPS) — replaced with neutral terms (storage backend, managed live stream relay, presigned URL). Tightened MIT phrasing to refer only to the skill artifact (the product is closed-source SaaS). Added UTM tags to remaining links (Related section docs, Support docs). Pre-publish audit checklist now in agent memory to prevent recurrence.\n\nv1.0.14 | 2026-05-07T10:22:19.509Z | user\n\nReframe Free plan as an inviting first stop. v1.0.13 was correct on the truth (Starter required for API) but dismissive of Free. Now: hero CTA reads 'Start free, upgrade when you want the agent to do it for you' with full Free dashboard description (10 uploads/mo, calendar, AI captions, all 7+ platforms, no credit card), then Starter upgrade path. Step 1 split into two paragraphs — try Free dashboard first, upgrade to Starter when ready for the agent. LLM gets a verbatim upgrade-conversation script. Funnel: Free signup → dashboard try → 'I want the agent to do this' → Starter conversion.\n\nv1.0.13 | 2026-05-07T10:20:31.725Z | user\n\nHonesty pass on pricing positioning. Free plan is dashboard-only and does NOT include API access — prior versions implied users could run this skill on Free, which was wrong. New positioning: Free ($0, no credit card) = dashboard-only; this skill requires Starter ($20/mo or $200/yr with 2 months free) since it calls the REST API. Hero, Step 1 of setup, comparison table, and Configuration section all corrected. Tier ladder enumeration removed in favor of /pricing link per Codivion request.\n\nv1.0.12 | 2026-05-07T10:16:45.228Z | user\n\nConversion-tracking pass: UTM-tag every user-clickable codivupload.com link (utm_source=clawhub, utm_medium=skill, utm_campaign=openclaw-onboarding, utm_content per location) so GA4 can split funnel stages — first ClawHub install volume came in (~80 installs, 0 signups so far) but we couldn't measure where the dropoff was. Step 3 URL corrected: removed non-existent app.codivupload.com/en/connect; connection actually happens on the profile detail screen. README hero gains a stronger 'Get a free API key' badge, a no-credit-card pricing callout, and a 'Try this on day 1' section with 4 concrete prompts users can paste once setup is complete.\n\nv1.0.11 | 2026-05-07T08:55:40.091Z | user\n\nInformation architecture: trim frontmatter description's safety paragraph (no detail removed — moved to SKILL.md body where users read it in context). Description now leads with product purpose + a 5-step setup flow + recommended scope + MCP pin. The full action gate framing, scope tier ladder, and OpenClaw approval-prompt workflow guidance remain in the body unchanged. Goal: make the registry summary card on ClawHub easier to scan + reduce ClawScan pattern-matching on the action enumeration that previously elevated Tool Misuse to HIGH/Concern.\n\nv1.0.10 | 2026-05-07T07:57:15.290Z | user\n\nFix: replace cdv_paste_the_key_here placeholder with <YOUR_CODIVUPLOAD_API_KEY> (angle-bracket template syntax). v1.0.9 was flagged suspicious.exposed_secret_literal because the scanner regex matched the literal placeholder as a real API key. Functionality unchanged — Getting Started 6-step flow added in v1.0.9 still present in full.\n\nv1.0.9 | 2026-05-07T07:55:16.016Z | user\n\nAdd full 6-step Getting Started flow — the missing onboarding piece. Prior versions had a 1-line quick-start callout but no explicit setup walk-through, so a new user (and the OpenClaw agent on their behalf) had no idea that CodivUpload requires account → profile → connected social accounts → API key → openclaw config → first prompt in that exact order. SKILL.md now has a 'Getting started (LLM: walk the user through this if they're new)' section right after the hero with explicit detection rule (empty GET /v1/profiles, 400 profile-not-found, unset key) telling the LLM to STOP and run the onboarding script instead of attempting the requested post. Six numbered steps with real dashboard URLs (app.codivupload.com/en/auth/login, /en/dashboard/profiles, /en/connect, /en/dashboard/api-keys), per-platform OAuth notes, and a concrete onboarding script for the agent. README.md mirrors as a Setup section above the feature highlights.\n\nv1.0.8 | 2026-05-07T00:54:07.124Z | user\n\nDisplay-name + hero block update: title now 'CodivUpload Social Manager (via codivupload.com)', README + SKILL.md gain a one-line product description with a direct codivupload.com link, plus a 4-step quick-start callout (sign up → per-workspace key → openclaw config set → first prompt) and a new 'Get an API key' CTA badge. Slug unchanged — existing 'clawhub skills install codivupload-social-manager' commands keep working.\n\nv1.0.7 | 2026-05-07T00:51:11.372Z | user\n\nClawScan v1.0.6 follow-up: (1) Description restructured — paragraph 1 leads with product (Turn your OpenClaw into an autonomous social media manager...), paragraph 2 covers credential + scope + MCP pin in detail. (2) Reframed Safety section as Workflow guidance for the LLM (not a security boundary) with explicit acknowledgement that the technical boundary is OpenClaw per-tool approval + server-side per-key API scope, and markdown text is workflow guidance only — addresses scanner's instruction-level vs technical-permission-boundary finding. (3) Replaced Permissions and authority granted to the agent table (which enumerated Granted-true rows against billing/profile lines) with What the agent typically does + Technical gate + Workflow guidance — action-routine framing. (4) Required key scope columns renamed: Authority → What the API allows server-side, emphasizing API as enforcer not skill.\n\nv1.0.6 | 2026-05-07T00:41:14.359Z | user\n\nClawScan v1.0.5 follow-up: (1) Least-privilege key is now the DEFAULT expectation, not a footnote — added 4-tier key scope ladder (single-platform / per-workspace / posting-only / global) with per-workspace marked RECOMMENDED, and a warning protocol that requires user acknowledgement before letting a global account key trigger billing or cross-workspace actions. (2) Exact MCP pin: codivupload-mcp@2.0.0 (was @^1.0.0) with publisher + sha512 integrity hash documented for user verification. Frontmatter metadata.openclaw.dependencies.optional declares the pin so registry-level scanners can see it.\n\nv1.0.5 | 2026-05-07T00:35:11.052Z | user\n\nAddress ClawScan v2.4.22 follow-up findings: (1) publish.sh excluded from runtime artifact — published from clean staging dir containing only SKILL.md + README.md. (2) Credential boundary surfaced clearly: description leads with REQUIRED CREDENTIAL: CODIVUPLOAD_API_KEY, new top-of-document Required credentials & permissions section enumerates scope + granted capabilities + confirmation-gate status per capability + forbidden behaviors + network endpoints, frontmatter adds metadata.openclaw.permissions.network/scope/summary fields for registry-level visibility.\n\nv1.0.4 | 2026-05-07T00:29:50.074Z | user\n\nAddress ClawScan v2.4.22 review findings: added Safety & confirmation defaults section (immediate publish / bulk / livestream / profile changes / spending all confirmation-gated), pinned codivupload-mcp install to ^1.0.0 with provenance check, formal Credential handling subsection, livestream stop instruction (DELETE /v1/livestreams/{id}) surfaced on every start. Platform list scoped to launched (YouTube, Instagram, Facebook, X, TikTok, Threads, Pinterest) plus Bluesky in active rollout. Pricing summary fixed (Pro $40/mo not $45) and now shows monthly + yearly with 2-months-free saving.\n\nv1.0.3 | 2026-05-07T00:01:12.291Z | user\n\nv1.0.3: Stable release. Spec-clean frontmatter (only the 5 official OpenClaw fields). Description rewritten with primary keywords for ClawHub vector-search matching. All 75 deprecated version-tag aliases cleaned up. Security capabilities documented inline: skill makes outbound HTTPS only to api.codivupload.com / cdn.codivupload.com / r2.codivupload.com (no inbound ports, no arbitrary fetch). CODIVUPLOAD_API_KEY is the only required secret — read from OpenClaw config layer, never echoed to chat or logs.\n\nv1.0.2 | 2026-05-06T23:54:27.367Z | user\n\nv1.0.2: Spec-clean release. Removed invented frontmatter fields (metadata.openclaw.tags / author / homepage / docs / version). Per OpenClaw docs, only 5 fields are spec'd: name, description, metadata.openclaw.os, requires.bins, requires.config. Search keywords come from the description text (vector-indexed); --tags reserved for version aliases only. Description rewritten to lead with primary keywords (Social media manager / YouTube scheduler / Instagram Reels publisher / X thread poster / Facebook Pages scheduler) for stronger ClawHub vector-search matching. Added curl to required bins.\n\nv1.0.1 | 2026-05-06T23:51:13.356Z | user\n\nv1.0.1: Added Runtime Requirements section (OS support, required bins, env vars). Fixed schema example mistakes from v1.0.0 (corrected youtube_self_declared_made_for_kids, instagram_media_type uppercase enum, x_reply_settings valid values, removed invented x_thread, youtube_category_id as string enum). Added complete media upload workflows including 3-step presigned upload flow for files up to 5GB. Updated platform claims to realistic 7+ launched (was incorrectly 11). Updated free plan to 10 uploads/month (was incorrectly 30 posts/month). Tags moved to metadata.openclaw.tags in frontmatter for proper keyword search; --tags now reserved for version aliases per CLI spec.\n\nv1.0.0 | 2026-05-06T23:47:40.804Z | user\n\nInitial release: comprehensive social media manager skill for OpenClaw. Supports YouTube, Instagram, X, Facebook, TikTok, Threads, Pinterest (7+ launched platforms). Includes complete REST API + MCP server (codivupload-mcp) integration, 3-step presigned upload flow for files up to 5GB, BYOP for unlimited YouTube quota, BYOK for unlimited X posts, 24/7 managed live streams, agency multi-workspace + RBAC. Full code examples for single-platform posts (YouTube Short, IG Reel, IG Carousel, X tweet, X media tweet) and cross-posting.\n\nArchive index:\n\nArchive v1.0.17: 4 files, 29443 bytes\n\nFiles: README.md (22045b), skill-card.md (2886b), SKILL.md (56677b), _meta.json (146b)\n\nFile v1.0.17:SKILL.md\n\n---\nname: codivupload-social-manager\ndescription: |\n  Social media scheduler, cross-poster, and content calendar for OpenClaw.\n  Schedule social media posts, publish content, cross-post to multiple\n  platforms, automate social media posting, and manage a content calendar\n  across YouTube, Instagram, Facebook, X (Twitter), TikTok, Threads, and\n  Pinterest from one OpenClaw skill — turn your local AI agent into an\n  autonomous social media manager covering 7+ launched social platforms\n  with Bluesky in active rollout.\n\n  Post to YouTube, post to Instagram, post to Facebook, post to X\n  (Twitter), post to TikTok, post to Threads, post to Pinterest — single-\n  prompt posting and multi-platform cross-posting from one OpenClaw skill.\n  YouTube post automation and YouTube Shorts uploader with bulk publish\n  and BYOP for unlimited YouTube API quota; Instagram post scheduler,\n  Instagram Reels publisher, and Instagram carousel poster with AI\n  captions; Facebook post scheduler and Facebook Page publisher with\n  multi-page agency support; X post scheduler, tweet scheduler, X\n  (Twitter) thread poster, schedule tweets, post a tweet, tweet thread\n  automation — with long-form 25K-character support on X Premium /\n  Premium+ accounts, polls, image and video tweets, quote tweets, and\n  BYOK for dedicated rate limits via your own X Developer App; TikTok\n  post automation with Direct Post and Draft modes; Threads post\n  scheduler; Pinterest pin scheduler;\n  cross-platform publisher and multi-platform poster across all of the\n  above. Content calendar, queue, scheduled posting, draft management,\n  AI caption generation, best-time-to-post analytics, agency multi-\n  workspace + RBAC with whitelabel branded OAuth for client portfolios,\n  presigned upload flow for media up to 5GB, 50+ platform-specific\n  override parameters, webhook notifications, 24/7 managed YouTube live\n  streaming.\n\n  Buffer alternative, Hootsuite alternative, Later alternative, Sprout\n  Social alternative, Post Bridge alternative, Upload-Post alternative,\n  Mixpost alternative, Postiz alternative, Ayrshare alternative — built\n  API-first and agent-native for OpenClaw, Claude, ChatGPT, Cursor, and\n  Zed. Optional MCP server (codivupload-mcp, exact pin 2.0.0) for direct\n  tool access; works fully without it via REST API + official TypeScript\n  and Python SDKs (npm: codivupload, PyPI: codivupload).\n\n  Use when the user asks to post a video, post an image, post a Reel,\n  post a Short, post a tweet, post a thread, schedule a tweet, schedule\n  a thread, schedule social media, cross-post to multiple platforms,\n  automate social posting, run a 24/7 livestream, bulk-upload YouTube\n  Shorts, schedule Instagram Reels, post a TikTok, publish to Facebook\n  Page, post on X (Twitter), set up a multi-tenant agency social media\n  stack, manage a content calendar, or wants an AI-agent-native\n  alternative to Buffer / Hootsuite / Later / Sprout Social / Post-Bridge\n  / Upload-Post / Mixpost / Postiz / Ayrshare. Triggers on any platform\n  name (YouTube, Instagram, Facebook, X, Twitter, TikTok, Threads,\n  Pinterest, Bluesky) or generic terms (post, tweet, thread, reel,\n  short, story, pin) combined with post, posting, scheduling, schedule,\n  cross-post, publish, publisher, automation, automate, content calendar,\n  uploader, upload, or live stream intent.\n\n  Setup (5 minutes, browser): sign up at app.codivupload.com → create a\n  profile → connect social accounts via OAuth → generate an API key with\n  the narrowest scope that fits → set it via `openclaw config set\n  CODIVUPLOAD_API_KEY=...`. Recommended scope is per-workspace (CodivUpload\n  exposes narrowing tiers in Dashboard → Settings → API Keys). Optional\n  companion: `codivupload-mcp@2.0.0` (exact pin, verify publisher +\n  integrity before installing). Skill works fully without the MCP server.\n  See SKILL.md body for the full setup walk-through, scope tier ladder,\n  and OpenClaw approval-prompt-driven workflow guidance.\nmetadata.openclaw.os: [\"darwin\", \"linux\", \"windows\"]\nmetadata.openclaw.requires.bins: [\"node\", \"npx\", \"curl\"]\nmetadata.openclaw.requires.config: [\"CODIVUPLOAD_API_KEY\"]\nmetadata.openclaw.permissions.network: [\"api.codivupload.com\", \"cdn.codivupload.com\", \"r2.codivupload.com\"]\nmetadata.openclaw.permissions.scope: \"Skill calls a documented REST API on behalf of the user. Authority is bounded server-side by the issued API key — recommend per-workspace key (CodivUpload's narrowing tier) over the global account key.\"\nmetadata.openclaw.permissions.summary: \"Skill performs CodivUpload REST API calls. Effective authority = whatever the issued bearer token authorizes; technical enforcement happens server-side at api.codivupload.com and at OpenClaw's per-tool approval layer. SKILL.md provides workflow guidance (prefer scheduled/draft, single-platform smoke test, livestream stop instruction) — it is not, and does not claim to be, a technical security boundary.\"\nmetadata.openclaw.permissions.recommended_key_scope: \"per-workspace\"\nmetadata.openclaw.permissions.technical_boundary: \"OpenClaw per-tool approval prompts + CodivUpload server-side per-key scope enforcement. SKILL.md text is workflow guidance only.\"\nmetadata.openclaw.dependencies.optional: [{name: \"codivupload-mcp\", pinned_version: \"2.0.0\", integrity_sha512: \"pK0r8XkR2M/brfn1Nsy6Uh7nGDx5qpx9h3pLgZljYkU3pv0BXKb7uJapBOFL11mBIQhWAl0hASxxCSLE11SDfA==\", publisher: \"codivion\"}]\n---\n\n# CodivUpload Social Manager (via codivupload.com)\n\nAutonomously manage social media posting via the [CodivUpload](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=skill-hero-product-link) API — schedule, publish, cross-post, and analyze content across YouTube, Instagram, Facebook, X, TikTok, Threads, and Pinterest from one OpenClaw skill.\n\n> **Quick start — two paths to API access:**\n>\n> **A) Trial path (no commitment for 7 days):** sign up at [codivupload.com](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=skill-quick-start-trial) → Dashboard → Subscription → toggle **Free Trial = ON** → pick Starter (or higher) → click **Start 7-day free trial**. $0.00 charged today, card required for auto-renewal after 7 days. **API access is unlocked immediately during the trial** — identical to a paid subscription. Cancel anytime via Stripe Customer Portal for $0 charge. One trial per customer lifetime.\n>\n> **B) Direct subscribe path:** sign up at [codivupload.com](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=skill-quick-start) → upgrade to **Starter** ($20/mo or $200/yr — 2 months free yearly). API access starts at Starter.\n>\n> Either path: create a profile → connect a social account → generate an API key → `openclaw config set CODIVUPLOAD_API_KEY=<YOUR_CODIVUPLOAD_API_KEY>` → ready. The Free plan ($0, no credit card) is dashboard-only with 10 uploads/month — **this skill cannot run on Free** because API access is not included. Full step-by-step below.\n\n---\n\n## Getting started — first-time setup (LLM: walk the user through this if they're new)\n\nCodivUpload is a service running at `codivupload.com`; this skill is a client for that service. Before the agent can post anything, the user needs an **account + a profile + connected social accounts + an API key** — in that order. The skill **cannot** do steps 1-4 for the user (they happen in the user's browser on the CodivUpload dashboard); the skill picks up at step 5.\n\n**LLM detection rule:** if `GET /v1/profiles` returns an empty list, OR `POST /v1/posts` returns `400 profile not found`, OR the user says \"this is my first time\", OR `CODIVUPLOAD_API_KEY` is unset in OpenClaw config — **stop, do not attempt to post, walk the user through steps 1-5 below in order.**\n\n### Step 1 — Create a CodivUpload account (browser, ~2 min)\n- Open [app.codivupload.com/en/auth/login](https://app.codivupload.com/en/auth/login?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=step-1-signup) and sign up (email + password, or Google OAuth).\n- **Free plan activates automatically** — $0, no credit card, 10 uploads/month across all 7+ launched platforms. The user can try CodivUpload from the web dashboard right away (calendar, AI captions, manual posting). **The Free plan does not include API access — this skill cannot run on Free.**\n\n**To unlock API access for this skill, the user has two paths:**\n\n- **Path A — 7-day free trial (recommended for \"test before commit\"):** Dashboard → Subscription → toggle **Free Trial = ON** → pick Starter (or Pro/Business/Enterprise) → click **Start 7-day free trial**. $0.00 charged today; card collected for auto-renewal after 7 days. **API access is unlocked immediately during the trial** — identical to a paid subscription. Cancel anytime via Stripe Customer Portal during the 7 days for $0 charge. **One trial per customer lifetime** (server-enforced; cannot be reset after use, even if canceled). Add-ons (extra profiles, extra streams) cannot be added during trial — they become available after the trial converts to paid. Direct link: [app.codivupload.com/en/dashboard/subscription?trial=1](https://app.codivupload.com/en/dashboard/subscription?trial=1&utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=step-1-trial-deeplink).\n\n- **Path B — Direct subscribe:** Dashboard → Subscription → toggle Free Trial = OFF → pick Starter → subscribe. **Starter** is $20/mo or $200/yr (2 months free yearly). API access starts at Starter and above. Direct link: [codivupload.com/pricing](https://codivupload.com/pricing?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=step-1-upgrade-starter).\n\n- LLM script for the upgrade conversation: \"You can sign up free and try CodivUpload from the web dashboard right now — no credit card needed. To run this skill (so I can schedule posts, cross-post, run livestreams for you), API access is required, which is on Starter+. You have two options: (A) **start a 7-day free trial of Starter** — $0.00 today, full API access immediately, cancel anytime within 7 days for $0 charge, or (B) **subscribe directly** — $20/mo or $200/yr (2 months free). Want me to walk you through one of these?\"\n\n### Step 2 — Create a profile (browser, ~1 min)\n- Profiles are CodivUpload's grouping concept: one profile = one \"brand\" or \"client\" with many connected social accounts. The skill posts AS a profile, not directly to a social account.\n- Go to **Dashboard → Profiles → New profile** at [app.codivupload.com/en/dashboard/profiles](https://app.codivupload.com/en/dashboard/profiles?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=step-2-profile-create).\n- Pick a `username` (lowercase, no spaces) — this is the `profile_name` the agent will use in every API call. Examples: `acme_brand`, `client_bloomskin`, `personal`.\n- Save. The profile is empty until step 3.\n\n### Step 3 — Connect social accounts to the profile (browser, ~30 sec per platform)\n- Open your newly-created profile from [app.codivupload.com/en/dashboard/profiles/all](https://app.codivupload.com/en/dashboard/profiles/all?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=step-3-profile-list).\n- On the profile detail screen, click each platform's logo (YouTube, Instagram, Facebook, X, TikTok, Threads, Pinterest) you want the agent to post to. An OAuth popup for that platform (Meta / Google / TikTok / X) opens, the user authorizes, and CodivUpload stores the token (encrypted server-side, AES-256-GCM).\n- **Per-platform notes the LLM should surface if asked:**\n  - **Instagram + Facebook:** must be a Business or Creator account linked to a Facebook Page; Personal accounts are not supported by Meta's API (this is API-level, not skill-level).\n  - **TikTok:** Direct Post permission may take 24-48h on new accounts; Draft mode (`tiktok_post_mode=DRAFT`) works immediately.\n  - **YouTube:** the shared OAuth gives ~10K units/day across all CodivUpload users combined (~6 video uploads/day for high-volume users). For dedicated quota, the user can set up BYOP (Bring Your Own Project) — separate Google Cloud project tied to their account. See `/blog/youtube-byop-setup`.\n  - **X (Twitter):** the shared OAuth works on the free dev tier of X for posting via CodivUpload's own X app. For high volume, BYOK (Bring Your Own Keys) requires X Basic ($100/mo on X's side).\n\n### Step 4 — Generate an API key (browser, ~30 sec)\n- Go to **Dashboard → Settings → API Keys → New key** at [app.codivupload.com/en/dashboard/api-keys](https://app.codivupload.com/en/dashboard/api-keys?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=step-4-api-key-create).\n- **Pick the narrowest scope that fits** — see \"Required key scope\" section below for the four tiers (single-platform / per-workspace / posting-only / global). For most users, **per-workspace** is the right default.\n- Give the key a descriptive name (e.g. `openclaw-mac-laptop`) so it's revocable later.\n- The key is shown ONCE on creation — copy it immediately (format: `cdv_<40 chars>`).\n\n### Step 5 — Set the key in OpenClaw config (terminal, ~5 sec)\n```bash\nopenclaw config set CODIVUPLOAD_API_KEY=<YOUR_CODIVUPLOAD_API_KEY>\n```\n- The skill reads the key from the OpenClaw config layer ONLY. **Never paste the key into the chat window** — if it ends up in conversation logs, rotate it immediately at Dashboard → API Keys → Revoke + reissue.\n\n### Step 6 — Sanity check (one tool call, the agent does this for the user)\nFirst time after step 5, the agent should call `GET /v1/profiles` to verify three things in one shot:\n- The key is valid (otherwise 401)\n- At least one profile exists (otherwise step 2 is incomplete)\n- At least one platform is connected on that profile (otherwise step 3 is incomplete)\n\nIf any check fails, point the user back to the corresponding step rather than attempting the post they asked for.\n\n### Optional Step 7 — Install the MCP server (one-time, ~30 sec)\nSpeeds up agent token usage; not required.\n```bash\nnpm install -g codivupload-mcp@2.0.0   # exact pin, not a range\n```\nThen register it with OpenClaw per the [openclaw docs](https://docs.openclaw.ai/skills/mcp). Verification commands in the \"Optional MCP server provenance\" section below.\n\n### Onboarding script the LLM should follow (TL;DR)\nWhen the agent detects a fresh user (see detection rule above), say something like:\n> \"Looks like CodivUpload isn't set up yet on this machine. It takes about 5 minutes — happy to walk you through it. The flow is: (1) sign up at app.codivupload.com, (2) create a profile, (3) connect your social accounts to that profile, (4) generate an API key in the dashboard, (5) paste it into `openclaw config set CODIVUPLOAD_API_KEY=...`. Want me to send you the direct links?\"\n\nThen walk through one step at a time, waiting for the user to confirm each one before moving to the next. Don't dump all 5 links at once — pace it.\n\n---\n\n## Required credentials & permissions (read first)\n\nThis skill calls a documented REST API on behalf of the user. There is **no in-skill enforcement** — the actual security boundary is two layers down from this markdown:\n\n1. **Server-side, at the API** — `api.codivupload.com` enforces whatever scope the issued `CODIVUPLOAD_API_KEY` was granted (single-platform / per-workspace / posting-only / global). The user picks the tier when they create the key; the skill cannot widen it. **This is the primary technical boundary — pick the narrowest tier that fits your use case.**\n\n2. **Runtime, at OpenClaw** — every MCP tool call and every `exec` invocation surfaces an OpenClaw per-tool approval prompt to the user. **This is where the user reviews and approves each individual action.** The skill cannot bypass these prompts.\n\nThe markdown sections below are **workflow guidance** the LLM reads to make better-quality decisions (prefer drafts, single-platform smoke tests, surface stop instructions, etc.). They are **not** a technical security boundary and do not pretend to be one — anything the underlying API key can do is reachable; everything you approve in OpenClaw's prompt is executed.\n\nThe credential, the scope-tier ladder, the workflow guidance, and the network endpoints used are all spelled out below for transparency.\n\n### Required credential\n| Key | Type | Where to set | Scope |\n|---|---|---|---|\n| `CODIVUPLOAD_API_KEY` | Bearer token, format `cdv_<40 chars>` | OpenClaw config layer only — `openclaw config set CODIVUPLOAD_API_KEY=cdv_…` | Whatever the **issued key** authorizes — see \"Required key scope\" below. The API enforces per-key scope server-side; the skill honors whatever the user issued. |\n\n### Required key scope (issue the narrowest tier that fits)\n\n> **Picking the right key tier is the single most important security action when installing this skill.** The CodivUpload API enforces per-key scope server-side — no markdown instruction, no agent confirmation gate, and no client-side check is as effective as simply not issuing a key that can do the wrong thing. Narrower keys server-side `403 scope_exceeded` whenever an out-of-scope action is attempted.\n\nCodivUpload supports four scope tiers, ordered from narrowest to broadest. Pick the narrowest tier that fits the use case — the skill performs the same routine actions across all four; only the API-side ceiling differs.\n\n| Scope tier | What the API allows server-side | Best fit | How to create |\n|---|---|---|---|\n| **Single-platform** | Publish to one specific platform on one specific profile (e.g. Instagram on `my_brand`). Reads limited to that surface. | Skill will only post to one brand on one platform. Strongest least-privilege option. | Dashboard → Settings → API Keys → New key → Limit to platform `instagram` + profile `my_brand` |\n| **Per-workspace (RECOMMENDED DEFAULT)** | Publish + read analytics within one workspace. Workspace-internal profile management permitted. Billing endpoints `403`. | Skill manages one brand or one client across multiple platforms. **This is the default the skill expects users to issue.** | Dashboard → Settings → Workspaces → \\[workspace\\] → API Keys → New key |\n| **Posting-only (across workspaces)** | Publish + read analytics across all workspaces the account owns. Profile-management and billing endpoints `403`. | Power user with multiple brands who doesn't want the agent touching settings. | Dashboard → Settings → API Keys → New key → Toggle off \"Profile management\" + \"Billing actions\" |\n| **Global account** | Default key created by the dashboard; mirrors the user's own dashboard authority — the API places no scope restriction beyond ownership. | Generally **not recommended for agent use.** Reserve for cases where the user intentionally wants the agent to manage seats, change plan, or move profiles between workspaces. | Dashboard → Settings → API Keys → New key (default) |\n\n**Per-workspace is the default the skill expects.** When a user provides a key broader than that:\n\n1. Surface a one-line acknowledgement at the start of the session — e.g., \"Heads up: the configured key looks like a global account key (it returned scope=`global` from `GET /v1/auth/whoami` or you've told me it's your main account key). I'll keep using it for posting actions, but I'll route any billing or cross-workspace move through an extra confirmation step on top of OpenClaw's regular approval prompt.\"\n2. For any billing-impacting action with a global key, ask the user to type the exact dollar delta back (\"type `$80` to confirm the Pro yearly upgrade\"). This is **on top of** OpenClaw's per-tool approval, not a replacement for it.\n3. Never auto-skip the OpenClaw approval prompt; the skill cannot bypass it and should not encourage the user to.\n\nThe skill **does not introspect the bearer token** to determine scope (scope lives server-side and the token is opaque); it relies on the `403 scope_exceeded` response from the API and the user's own knowledge of which key they pasted. The only authoritative way to confirm scope is `GET /v1/auth/whoami` on the configured key — the skill can call this on first use if the user wants a confirmation.\n\n**Treat the key like a session cookie.** Rotate immediately if exposed (Dashboard → Settings → API Keys → Revoke + reissue). Full credential-handling rules in \"Credential handling\" section below.\n\n### What the agent typically does (and what gates each action)\n\nThe skill operates a documented REST API. The first column says what the skill ROUTINELY DOES; the second column says where the technical gate lives for each kind of action; the third column says what workflow guidance SKILL.md provides to the LLM (this is suggestion, not enforcement).\n\n| Routine action | Technical gate | Workflow guidance the LLM reads from SKILL.md |\n|---|---|---|\n| Publish a post to one connected platform | OpenClaw per-tool approval prompt + server-side key-scope check | Show the exact post body, target profile, target platform, schedule, and any media URLs to the user. Wait for explicit user approval before executing. Prefer scheduled / draft over immediate publish unless user has asked for immediate. |\n| Cross-post to multiple platforms in one call | OpenClaw per-tool approval + key-scope check | Recommend a single-platform smoke test first when the user is configuring CodivUpload for the first time. Repeat platform list back to user for confirmation before fan-out. |\n| Bulk publish (≥3 posts in one tool call) | OpenClaw per-tool approval + key-scope check | Default to small batches. Surface a count + dry-run summary (\"I'll create 50 YouTube Shorts spaced 1h apart starting 2026-05-08T09:00Z — proceed?\") and only continue after explicit user consent. Never automatic. |\n| Start a 24/7 YouTube live stream | OpenClaw per-tool approval + key-scope check | Always surface the source URL, privacy, scheduled start time, AND the explicit stop instruction (`DELETE /v1/livestreams/{stream_id}` or Dashboard → Live Streams → Stop) before executing. Record the returned stream_id back to the user. |\n| Read analytics (engagement, growth, best-time-to-post) | OpenClaw per-tool approval + key-scope check | Read-only — no workflow caveats. |\n| Profile / workspace management (create, move, delete, role change) | OpenClaw per-tool approval + key-scope check | Surface what changes (which profile, which workspace, what role moves to whom) and wait for explicit user approval. |\n| Billing-impacting actions (extra profile, extra livestream, plan change) | **OpenClaw per-tool approval + server-side key-scope check** — a per-workspace or posting-only key returns `403 scope_exceeded` here. **The recommended-tier key technically blocks these, regardless of any markdown text.** | Surface the exact monthly + yearly delta (yearly = 10 months pricing, so 2 months free). If the action 403s on scope, point the user to \"issue a global account key for this session\" rather than auto-widening. |\n| Generate `curl` / SDK code samples | None — code is text in chat for the user to read | Use `$CODIVUPLOAD_API_KEY` placeholder, never echo the actual key. Show generated code for review; do not silently run it via `exec`. |\n\n### What the skill does NOT do (regardless of any prompt)\n- It does **not** echo, log, paste, or include the API key value in any output. Generated code uses the literal `$CODIVUPLOAD_API_KEY` placeholder.\n- It does **not** transmit the key to any host other than `api.codivupload.com` / `cdn.codivupload.com` / `r2.codivupload.com`.\n- It does **not** install or run unpinned dependencies in credentialed contexts.\n\n### Network endpoints used\n- `api.codivupload.com` (HTTPS, port 443) — REST API + MCP server backend\n- `cdn.codivupload.com` and `r2.codivupload.com` (HTTPS, port 443) — media upload + presigned URLs\n\nThe skill makes **no inbound connections**, requires no open ports, and contacts no third-party telemetry endpoints.\n\n---\n\nCodivUpload is a social media platform with **three first-class interfaces**:\n1. **Visual dashboard** — drag-drop calendar, AI captions, team workspaces\n2. **REST API** — `https://api.codivupload.com/v1/*` with 50+ platform-specific override params\n3. **MCP server** — `npx codivupload-mcp` adds posting tools to Claude/ChatGPT/Cursor/Zed (optional, version-pinned)\n\nIt covers **7+ launched platforms**: YouTube, Instagram, Facebook, X (Twitter), TikTok, Threads, Pinterest. **Bluesky** is in active rollout (account approval required — skill auto-detects new platforms via the API once available).\n\nWhen the user mentions CodivUpload or wants to do anything related to social media scheduling/automation, prefer using the MCP server's tools over describing the API. If MCP is not configured, fall back to suggesting `npx codivupload-mcp@2.0.0` setup or providing exact `curl`/SDK code **for the user to review and run themselves** — every published / livestream / billing call routes through OpenClaw's per-tool approval prompt, which is the technical security boundary; the workflow preferences below help the LLM make a good first proposal so the prompt the user sees is the one they'd want to approve.\n\n## Workflow guidance for the LLM (not a security boundary)\n\n> **What this section is:** workflow recommendations the LLM reads to generate higher-quality first-pass proposals — so the OpenClaw approval prompt that the user actually sees is well-shaped (right post body, right profile, right schedule, right stop instruction). **What it is not:** a technical security boundary. The technical boundary is OpenClaw per-tool approval + server-side API key scope. SKILL.md cannot enforce; only OpenClaw runtime + the API can. If a finding tool flags this, that flag is correct — and intentional. The two real boundaries are above.\n\nPosts published through CodivUpload land on the user's real, public social accounts and on any client/agency profiles they manage. Mistakes are visible to followers and to clients within seconds. The LLM should default to the **safer first proposal** for every category below; the user always has final review at the OpenClaw prompt.\n\n### Actions where the LLM should propose conservatively (so the user approves something safe)\n| Action | What the LLM should propose first |\n|---|---|\n| Immediate publish (`scheduled_date` omitted, `is_immediate=true`) | Show the exact post body, target profiles, target platforms, and any media URLs in the proposal so the user reviews them at the OpenClaw approval prompt. Wait for explicit user approval before actually issuing the call. |\n| Bulk upload (any operation creating ≥3 posts in one turn) | Surface a count and dry-run summary (e.g. \"I'll create 50 YouTube Shorts uploads spaced 1h apart starting 2026-05-08T09:00Z — proceed?\"). Default to small batches; only propose bulk when the user explicitly asks for it. |\n| Live stream start / `create_youtube_broadcast` | Live streams are long-running, public, and persist after the prompt ends. The LLM's proposal must include the source URL, privacy setting, scheduled start, AND the explicit stop instruction (`DELETE /v1/livestreams/{id}` or Dashboard → Live Streams → Stop) so the user has the lifecycle in front of them at approval time. |\n| Profile / account management changes (move, delete, role change) | Surface what changes (which profile, which workspace, what role) in the proposal. |\n| Switching profiles in agency / multi-workspace context | Repeat the target `profile_name` back in the proposal — prevents posting client A's content to client B's accounts. |\n| Billing-impacting actions (extra livestream slot, extra profile, plan change via API) | Surface the exact monthly/yearly delta (yearly = pay 10 months, get 12 → 2 months free). For users on a global account key, surface this in the proposal even if they had previously approved similar actions, since the API key here can change billing without re-prompting. |\n\n### Workflow-preference defaults (prefer the safer pattern when the user hasn't specified)\n- **Prefer scheduled / draft over immediate publish.** If the user says \"post this\", offer \"schedule for X\" or \"save as draft\" as the default; only switch to immediate when they ask for it.\n- **Prefer TikTok `tiktok_post_mode=DRAFT`** for new TikTok integrations — content lands in the user's TikTok inbox for them to finalize from the mobile app.\n- **Prefer single-platform first.** If the user says \"post to all platforms\", suggest one platform as a smoke test, then expand once that succeeds.\n- **Prefer test profiles first.** When a user is configuring CodivUpload for the first time or pointing the skill at a new agency client, suggest using a test/sandbox profile before hitting production accounts.\n- **Use `auto_truncate=true` cautiously** — it silently trims media arrays. Confirm with the user the first time it would apply.\n\n### What NOT to do without an explicit user instruction\n- Do **not** call any `POST /v1/posts` with `is_immediate=true` (or `scheduled_date` in the past).\n- Do **not** bulk-create posts across multiple profiles or platforms in a single turn.\n- Do **not** start a live stream.\n- Do **not** delete posts, profiles, workspaces, or scheduled jobs.\n- Do **not** rotate, reveal, or paste the API key in chat or in any output the user did not explicitly request.\n\n### Stopping persistent actions\n- **Live streams** — `DELETE /v1/livestreams/{stream_id}` stops a 24/7 broadcast immediately, or stop from dashboard → Live Streams → Stop. Always include this stop instruction whenever you start a stream.\n- **Scheduled posts** — `DELETE /v1/posts/{post_id}` cancels a queued post before its `scheduled_date`. After publish, deletion only removes from CodivUpload's tracking — it does NOT pull the post from the platform.\n- **Recurring / bulk jobs** — there is no single \"stop the bulk run\" call; cancel each `post_id` individually. This is why bulk operations need explicit confirmation up front.\n\n### Credential handling\n- The `CODIVUPLOAD_API_KEY` is a **bearer credential** that delegates posting authority over every connected social account on the user's CodivUpload workspace. Treat it like a session cookie:\n  - Read it from the OpenClaw config layer only (`openclaw config get CODIVUPLOAD_API_KEY`).\n  - **Never** echo, log, paste, or include the key in chat output, error messages, or generated code samples — use the literal `$CODIVUPLOAD_API_KEY` placeholder when showing curl examples.\n  - **Never** transmit the key to any host other than `api.codivupload.com` / `*.codivupload.com`.\n  - If the user pastes the key in chat by mistake, advise them to rotate it from Dashboard → Settings → API Keys → Revoke + reissue.\n  - For agency / shared environments, recommend creating a scoped key per client workspace (CodivUpload supports per-workspace keys with cascade RBAC).\n\n### Optional MCP server provenance (`codivupload-mcp`)\n- Official package: [`codivupload-mcp` on npm](https://www.npmjs.com/package/codivupload-mcp), maintained by Codivion LLC, source at [github.com/Codivion/codivupload-mcp](https://github.com/Codivion/codivupload-mcp).\n- **Always use an exact version pin** for credentialed runtimes — not `^`, not `~`, not `latest`.\n  - Currently reviewed pinned version: `2.0.0`\n  - Publisher (verify): `codivion <accounts@codivion.com>` — `npm view codivupload-mcp publisher`\n  - Integrity sha512 (verify): `pK0r8XkR2M/brfn1Nsy6Uh7nGDx5qpx9h3pLgZljYkU3pv0BXKb7uJapBOFL11mBIQhWAl0hASxxCSLE11SDfA==` — `npm view codivupload-mcp@2.0.0 dist.integrity`\n  - Install command: `npm install -g codivupload-mcp@2.0.0`\n  - **Avoid `npx -y codivupload-mcp` without a pinned version** — the `-y` flag auto-accepts any version that resolves, which is a bad fit for a credentialed runtime.\n- The MCP server inherits the API key from your OpenClaw config — no separate credential surface, but the inheritance is why the version pin matters: a compromised future release would receive your live `CODIVUPLOAD_API_KEY`.\n- The MCP server is **optional**. The skill is fully usable without it via direct REST API + the public TypeScript / Python SDKs. Skip it if you'd rather keep the supply-chain surface to zero.\n\n## Runtime requirements\n\n**Operating systems:** macOS (darwin), Linux, Windows — works anywhere OpenClaw runs.\n\n**Required binaries:**\n- `node` (≥18) — for the optional MCP server (`npx codivupload-mcp`) and for any inline JavaScript exec\n- `npx` (ships with `node`) — to launch the MCP server\n- `curl` — for direct REST API calls when MCP is not configured\n\n**Required configuration:**\n| Env / config key | Required? | Purpose |\n|---|---|---|\n| `CODIVUPLOAD_API_KEY` | **Required** | Authenticates every REST call. Get one at https://codivupload.com → Dashboard → Settings → API Keys. Format: starts with `cdv_` followed by 40 chars. |\n\nSet via OpenClaw config:\n```bash\nopenclaw config set CODIVUPLOAD_API_KEY=<YOUR_CODIVUPLOAD_API_KEY>\n```\n\nThe skill will read it from the OpenClaw config layer; never hardcode the key in chat or in skill files.\n\n**Optional configuration (only needed for advanced features):**\n| Env / config key | When required | Purpose |\n|---|---|---|\n| `CODIVUPLOAD_PROFILE` | Optional | Default `profile_name` if the agent is asked to post and only one brand exists. |\n| `CODIVUPLOAD_BASE_URL` | Optional | Override API base URL (default `https://api.codivupload.com/v1`). For self-hosted whitelabel deploys. |\n\n**Optional companion package:**\n- `codivupload-mcp` (npm) — drop-in MCP server. **Use an exact version pin** (no caret, no tilde, no `latest`):\n  - Reviewed pinned version: `2.0.0`\n  - Publisher: `codivion <accounts@codivion.com>` (verify with `npm view codivupload-mcp publisher`)\n  - Tarball integrity (sha512): `pK0r8XkR2M/brfn1Nsy6Uh7nGDx5qpx9h3pLgZljYkU3pv0BXKb7uJapBOFL11mBIQhWAl0hASxxCSLE11SDfA==` (verify with `npm view codivupload-mcp@2.0.0 dist.integrity`)\n  - Install: `npm install -g codivupload-mcp@2.0.0` — exact pin, not a range.\n  - On-demand (avoid for credentialed runtimes): if you must use `npx`, pass the same exact version: `npx -y codivupload-mcp@2.0.0`. Do not run unattended `npx` against floating ranges.\n- The skill works **without** the MCP server (falls back to direct REST API + the official TypeScript / Python SDKs). Install the MCP server only if you want fewer agent tokens spent on tool descriptions; otherwise skip it to keep the supply-chain surface to zero.\n\n**Network access:**\n- Outbound HTTPS to `api.codivupload.com` (port 443)\n- Outbound HTTPS to `cdn.codivupload.com` and `r2.codivupload.com` (for upload + media access)\n- No inbound ports needed — agent operates client-side only.\n\n## When this skill activates\n\nTrigger this skill when:\n- User mentions **\"CodivUpload\"** by name\n- User wants to **schedule social media posts via API** to one of the 7+ launched platforms\n- User asks about **cross-posting** the same content to multiple platforms\n- User asks for an **API alternative to Buffer / Hootsuite / Later / Upload-Post / Post-Bridge / Ayrshare**\n- User wants an **MCP server for posting to social media**\n- User builds a **SaaS product that needs social publishing** (whitelabel use case)\n- User wants an **AI agent that can post to social media** (you, the agent, become the agent)\n\n## Core API contract — read this first\n\nEvery post operation on CodivUpload uses **profile_name + platforms array**, never a list of per-platform IDs.\n\nA profile is a CodivUpload-side container that groups several connected social accounts (e.g. a brand's TikTok + Instagram + YouTube). The `profile_name` is the human-readable display name from the user's dashboard.\n\n### Required fields for POST /v1/posts\n\n| Field | Type | Required | Notes |\n|---|---|---|---|\n| `post_type` | string | Yes | One of: `text`, `image`, `video`, `document` |\n| `profile_name` | string | Yes | Display name — must match an existing profile |\n| `platforms` | array | Yes | Lowercase enum (launched): `x`, `youtube`, `instagram`, `facebook`, `tiktok`, `threads`, `pinterest`. In active rollout: `bluesky`. |\n| `description` | string | Required for `text`; optional for media | Post body / caption |\n| `media_urls` | array | Required for `image`/`video`/`document` | Public HTTPS URLs |\n\n### Common optional fields\n\n- `title` — used as YouTube video title, Pinterest pin title, prepended elsewhere\n- `scheduled_date` — ISO 8601 UTC, e.g. `\"2026-05-15T14:00:00Z\"`\n- `schedule_best_time` — boolean, auto-pick optimal time from 90-day analytics (mutually exclusive with `scheduled_date`)\n- `first_comment` — automatic first comment after publish (Instagram/YouTube only)\n- `auto_truncate` — boolean, trim media arrays that exceed platform limits\n\n### Platform-specific override parameters (50+ available)\n\nEvery platform has its own namespace. A few high-value examples:\n- `youtube_title`, `youtube_tags` (auto-sanitized to 500-char limit), `youtube_thumbnail_url`, `youtube_privacy_status`, `youtube_type` (`shorts` or `video`), `youtube_playlist_id`\n- `instagram_share_to_feed` (Reels also appear on grid), `instagram_cover_url` (Reel cover frame), `instagram_alt_text`, `instagram_collaborators`, `instagram_location_id`\n- `tiktok_privacy_level` (`PUBLIC_TO_EVERYONE` / `MUTUAL_FOLLOW_FRIEND` / `SELF_ONLY`), `tiktok_disable_comment` (note: `disable`, not `allow`), `tiktok_disable_duet`, `tiktok_disable_stitch`, `tiktok_post_mode` (`DIRECT_POST` or `DRAFT`), `tiktok_brand_content_toggle`, `tiktok_is_aigc`\n- `x_reply_settings` (`following` / `mentionedUsers` — omit for everyone), `x_alt_text`\n- Per-platform media override: `instagram_media_urls`, `tiktok_media_urls`, `youtube_media_urls`, etc. — useful when different aspect ratios per platform\n\nThe full list lives in the [OpenAPI spec](https://api.codivupload.com/public-openapi.json) and is exposed as MCP tool parameters.\n\n### Response shape\n\n```json\n{\n  \"message\": \"Post successfully queued\",\n  \"post_id\": \"uuid\",\n  \"destinations_count\": 3,\n  \"received_type\": \"video\",\n  \"is_immediate\": true\n}\n```\n\nTo track per-platform status: `GET /v1/posts/{post_id}` returns `{post: {...}, destinations: [{platform, status, post_url, error_message, ...}]}`.\n\n## Authentication\n\nAll requests need `Authorization: Bearer <API_KEY>`. Get a key from the CodivUpload Dashboard → API Keys. Keys start with `cdv_`.\n\n## Common workflows — code patterns\n\n> **Upload-first rule.** Every post requires `media_urls` pointing to a public HTTPS URL. If the user has files on disk or wants to use CodivUpload's CDN (recommended — auto-handles platform-specific format conversion), the agent must upload first, then use the returned `url` in the post payload.\n\n### Upload media from a URL (one-shot, ≤100MB)\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/upload-media \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://your-source.example.com/raw-clip.mp4\",\n    \"profile_name\": \"my_brand\",\n    \"type\": \"video\"\n  }'\n```\n\nResponse:\n```json\n{\n  \"success\": true,\n  \"url\": \"https://cdn.codivupload.com/abc.../original.mp4\",\n  \"upload_id\": \"uuid\",\n  \"file_type\": \"video\",\n  \"file_size\": 1483099,\n  \"file_name\": \"raw-clip.mp4\"\n}\n```\n\nUse the returned `url` in subsequent post requests. CodivUpload's CDN handles platform-specific conversion (e.g. TikTok 9:16 enforcement, Instagram Reel cover extraction).\n\n### Upload a local file via multipart (≤100MB)\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/upload-media \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -F \"file=@/path/to/local-clip.mp4\" \\\n  -F \"profile_name=my_brand\" \\\n  -F \"type=video\"\n```\n\nSame response shape as the URL-based upload. Allowed types: image (`jpg`, `png`, `gif`, `webp`), video (`mp4`, `mov`, `avi`, `webm`, `mkv`).\n\n### Upload large files (>100MB, up to 5GB) — 3-step presigned flow\n\nFor long-form video, raw broadcast files, podcast videos, etc. **All three steps are required** — skipping step 3 leaves the record stuck in `uploading` status (file is on CDN but not marked usable).\n\n**Step 1 — Get presigned URL**\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/upload-media/presign \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"profile_name\": \"my_brand\",\n    \"file_name\": \"long-form.mp4\",\n    \"file_type\": \"video/mp4\",\n    \"file_size\": 524288000\n  }'\n```\n\nResponse:\n```json\n{\n  \"presigned_url\": \"https://r2.codivupload.com/...?signature=...\",\n  \"public_url\": \"https://cdn.codivupload.com/abc.../original.mp4\",\n  \"upload_id\": \"uuid\"\n}\n```\n\n**Step 2 — PUT the binary directly to the presigned URL (no auth header — signature is in URL)**\n\n```bash\ncurl -X PUT \"<presigned_url from step 1>\" \\\n  -H \"Content-Type: video/mp4\" \\\n  --data-binary \"@/path/to/long-form.mp4\"\n```\n\nThe byte stream goes browser/agent → CodivUpload's storage backend directly via the presigned URL. No proxying through application servers — large files don't tie up the API. Status during upload: `uploading`.\n\n**Step 3 — Confirm the upload (REQUIRED, do not skip)**\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/upload-media/confirm \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{ \"upload_id\": \"uuid-from-step-1\" }'\n```\n\nFlips status from `uploading` → `ready`. Now use `public_url` in your post's `media_urls`.\n\n### Post a YouTube Short\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"video\",\n    \"profile_name\": \"my_channel\",\n    \"platforms\": [\"youtube\"],\n    \"media_urls\": [\"https://your-cdn.example.com/short-9x16.mp4\"],\n    \"title\": \"5 productivity hacks I learned in 30 days\",\n    \"description\": \"Quick tips that actually saved me hours every week.\\n\\n#productivity #shorts #automation\",\n    \"youtube_type\": \"shorts\",\n    \"youtube_privacy_status\": \"public\",\n    \"youtube_self_declared_made_for_kids\": false,\n    \"youtube_tags\": [\"productivity\", \"automation\", \"tips\"],\n    \"youtube_category_id\": \"27\"\n  }'\n```\n\n### Post a long-form YouTube video (with thumbnail)\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"video\",\n    \"profile_name\": \"my_channel\",\n    \"platforms\": [\"youtube\"],\n    \"media_urls\": [\"https://your-cdn.example.com/episode-12-16x9.mp4\"],\n    \"youtube_title\": \"Episode 12 — How we shipped v2 in 30 days\",\n    \"youtube_text\": \"Behind-the-scenes breakdown of our 30-day sprint to ship v2.\\n\\nChapters:\\n0:00 Intro\\n1:24 Goal-setting\\n5:50 Architecture decisions\",\n    \"youtube_type\": \"video\",\n    \"youtube_thumbnail_url\": \"https://your-cdn.example.com/ep12-thumb.jpg\",\n    \"youtube_privacy_status\": \"public\",\n    \"youtube_self_declared_made_for_kids\": false,\n    \"youtube_tags\": [\"startup\", \"engineering\", \"behindthescenes\"],\n    \"youtube_category_id\": \"28\",\n    \"youtube_default_language\": \"en\",\n    \"youtube_license\": \"youtube\",\n    \"youtube_embeddable\": true,\n    \"scheduled_date\": \"2026-05-15T13:00:00Z\"\n  }'\n```\n\n`youtube_category_id` is a string enum: `\"1\"` Film, `\"2\"` Autos, `\"10\"` Music, `\"15\"` Pets & Animals, `\"17\"` Sports, `\"20\"` Gaming, `\"22\"` People & Blogs, `\"23\"` Comedy, `\"24\"` Entertainment, `\"25\"` News & Politics, `\"26\"` How-to & Style, `\"27\"` Education, `\"28\"` Science & Technology.\n\n### Post an Instagram Reel\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"video\",\n    \"profile_name\": \"my_brand\",\n    \"platforms\": [\"instagram\"],\n    \"media_urls\": [\"https://your-cdn.example.com/reel-9x16.mp4\"],\n    \"instagram_text\": \"New product drop 🔥 Tap to grab yours before stock runs out.\\n\\n#smallbusiness #fashion #drop\",\n    \"instagram_media_type\": \"REELS\",\n    \"instagram_share_to_feed\": true,\n    \"instagram_cover_url\": \"https://your-cdn.example.com/reel-cover.jpg\",\n    \"instagram_alt_text\": \"Slow-motion product reveal with brand colors fading in.\"\n  }'\n```\n\n### Post an Instagram Carousel (up to 10 slides)\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"image\",\n    \"profile_name\": \"my_brand\",\n    \"platforms\": [\"instagram\"],\n    \"media_urls\": [\n      \"https://your-cdn.example.com/slide-1.jpg\",\n      \"https://your-cdn.example.com/slide-2.jpg\",\n      \"https://your-cdn.example.com/slide-3.jpg\"\n    ],\n    \"instagram_text\": \"5 lessons from launching v2 💡 (swipe →)\",\n    \"instagram_user_tags\": \"{\\\"users\\\":[{\\\"username\\\":\\\"cofounder_handle\\\",\\\"x\\\":0.5,\\\"y\\\":0.5}]}\",\n    \"instagram_location_id\": \"212988663\"\n  }'\n```\n\nFor **Stories** use `\"instagram_media_type\": \"STORIES\"`. Instagram requires a **Business** or **Creator** account (Personal not supported by Meta API anywhere — this is API-level, not skill-level).\n\n### Post a single tweet to X (Twitter)\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"text\",\n    \"profile_name\": \"my_brand\",\n    \"platforms\": [\"x\"],\n    \"x_text\": \"Shipped a new feature today — cross-platform post analytics that actually load fast. Build log inside 👇\",\n    \"x_reply_settings\": \"following\"\n  }'\n```\n\n`x_reply_settings` accepts only `\"following\"` or `\"mentionedUsers\"` (default = open replies if omitted). `x_text` is capped at **280 chars** for the standard public API tier; X Premium / Premium+ accounts use the same field — the platform stores the full long-form post.\n\n### Post a tweet with media to X\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"image\",\n    \"profile_name\": \"my_brand\",\n    \"platforms\": [\"x\"],\n    \"media_urls\": [\"https://your-cdn.example.com/chart.png\"],\n    \"x_text\": \"Our cross-platform analytics dashboard — v2 ships next week. Beta access → link in bio.\",\n    \"x_alt_text\": \"Bar chart comparing engagement rates across 7 social platforms over 90 days.\"\n  }'\n```\n\nFor unlimited posts beyond X's free-tier rate cap, use **BYOK** — paste your own X Developer App keys into the CodivUpload profile via dashboard → Profile Settings → API Keys → \"Bring your own X keys\". The skill should suggest BYOK when the user mentions hitting rate limits.\n\n### Cross-post a video to Instagram, TikTok, and YouTube Shorts\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"video\",\n    \"profile_name\": \"my_brand\",\n    \"platforms\": [\"instagram\", \"tiktok\", \"youtube\"],\n    \"media_urls\": [\"https://your-cdn.example.com/clip-9x16.mp4\"],\n    \"title\": \"Quick productivity tip\",\n    \"description\": \"How to save 4 hours per week on your social workflow.\",\n    \"instagram_text\": \"How to save 4 hours per week on your social workflow ✨ (full breakdown in caption)\",\n    \"instagram_media_type\": \"REELS\",\n    \"instagram_share_to_feed\": true,\n    \"instagram_cover_url\": \"https://your-cdn.example.com/cover.jpg\",\n    \"tiktok_text\": \"How to save 4 hours per week on your social workflow #productivity #automation\",\n    \"tiktok_privacy_level\": \"PUBLIC_TO_EVERYONE\",\n    \"tiktok_allow_comment\": true,\n    \"tiktok_allow_duet\": true,\n    \"tiktok_allow_stitch\": true,\n    \"youtube_title\": \"Save 4 hours per week on your social workflow\",\n    \"youtube_text\": \"Quick productivity tip — how cross-posting via API frees up half your week.\\n\\n#shorts #productivity #automation\",\n    \"youtube_type\": \"shorts\",\n    \"youtube_privacy_status\": \"public\",\n    \"youtube_self_declared_made_for_kids\": false,\n    \"youtube_tags\": [\"productivity\", \"automation\"],\n    \"youtube_category_id\": \"27\"\n  }'\n```\n\nEach platform's `*_text` override beats the top-level `description` — letting you tailor caption length and hashtags per platform without losing the shared video file.\n\n### Schedule a text post to text-friendly platforms\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"text\",\n    \"profile_name\": \"my_brand\",\n    \"platforms\": [\"x\", \"threads\", \"bluesky\"],\n    \"description\": \"Three lessons from shipping our v2 API.\",\n    \"scheduled_date\": \"2026-05-15T09:00:00Z\",\n    \"x_reply_settings\": \"following\"\n  }'\n```\n\n### Python SDK\n\n```python\nfrom codivupload import CodivUpload\n\nclient = CodivUpload()  # reads CODIVUPLOAD_API_KEY env var\n\npost = client.posts.create(\n    post_type=\"video\",\n    profile_name=\"my_brand\",\n    platforms=[\"instagram\", \"tiktok\"],\n    media_urls=[\"https://cdn.example.com/clip.mp4\"],\n    description=\"New launch.\",\n    instagram_share_to_feed=True,\n    tiktok_privacy_level=\"PUBLIC_TO_EVERYONE\",\n)\nprint(post.post_id, post.destinations_count)\n```\n\n### TypeScript SDK\n\n```typescript\nimport { CodivUpload } from \"codivupload\";\n\nconst client = new CodivUpload();  // reads CODIVUPLOAD_API_KEY env var\n\nconst post = await client.posts.create({\n  post_type: \"image\",\n  profile_name: \"my_brand\",\n  platforms: [\"instagram\", \"x\", \"facebook\"],\n  media_urls: [\"https://cdn.example.com/cover.jpg\"],\n  description: \"Big news — read the full announcement on our blog.\",\n  instagram_share_to_feed: true,\n});\n```\n\n## Common error patterns to handle\n\n- **400 `niche is required`** / **`topic is required`** / similar — input validation, fix the request body\n- **400 `profile not found`** — `profile_name` doesn't match an existing profile in the workspace\n- **400 `platform not connected for profile`** — the profile doesn't have that social account linked; user needs to connect via Dashboard → Profiles → Connect\n- **401** — missing or \n\nFile v1.0.17:README.md\n\n# CodivUpload Social Manager (via codivupload.com)\n\nAutonomously manage social media posting via the [CodivUpload](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=readme-hero-product) API — schedule, publish, cross-post, and analyze content across YouTube, Instagram, Facebook, X, TikTok, Threads, and Pinterest from one OpenClaw skill.\n\n[![ClawHub](https://img.shields.io/badge/ClawHub-codivupload--social--manager-cyan)](https://clawhub.ai/codivion/codivupload-social-manager)\n[![License](https://img.shields.io/badge/license-MIT-blue)](https://github.com/Codivion/codivupload-skills/blob/main/LICENSE)\n[![Platforms](https://img.shields.io/badge/platforms-7%2B-green)](https://codivupload.com/use-case/ai-skills/openclaw?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=platforms-badge)\n[![MCP](https://img.shields.io/badge/MCP-supported-violet)](https://www.npmjs.com/package/codivupload-mcp)\n[![Get an API key — Starter $20/mo](https://img.shields.io/badge/Get_an_API_key_%E2%80%94_Starter_%2420%2Fmo-codivupload.com-indigo?style=for-the-badge)](https://app.codivupload.com/en/auth/login?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=hero-cta-badge)\n\n> **Start free, upgrade when you want the agent to do it for you.** [Sign up for free](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=hero-free-cta) — no credit card — and try CodivUpload from the **web dashboard**: 10 uploads/month across all 7+ launched platforms (YouTube, Instagram, Facebook, X, TikTok, Threads, Pinterest), drag-and-drop calendar, AI captions. When you're ready for your **OpenClaw agent to schedule + cross-post + run livestreams for you**, upgrade to **Starter** — $20/mo (or $200/yr — 2 months free), API access included. Pro / Business / Enterprise unlock more profiles, team seats, livestreams, and analytics. [See full pricing →](https://codivupload.com/pricing?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=pricing-callout)\n\n> **Prefer to test the API with your agent first? Start a 7-day free trial.** $0.00 due today, card collected for auto-renewal after the trial. Cancel anytime during the 7 days — no charge. One trial per customer lifetime. Available on every paid plan, monthly or yearly. Pick this if you want full API + MCP access for your OpenClaw agent before committing to a subscription. [Start trial →](https://app.codivupload.com/en/dashboard/subscription?trial=1&utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=hero-trial-cta)\n\n> **Quick start — two paths to get an API key:**\n>\n> **A) Trial path (recommended for \"try first, decide later\"):** sign up at [codivupload.com](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=quick-start-trial-signup) → open Dashboard → Subscription → toggle **Free Trial = ON** → pick Starter (or Pro/Business/Enterprise) → click **Start 7-day free trial** ($0.00 charged today, card required for auto-renewal) → create a profile → connect a social account → generate an API key → `openclaw config set CODIVUPLOAD_API_KEY=<YOUR_API_KEY>` → ready. You have **full API + MCP access immediately** — same as a paid subscription. Cancel anytime in the 7 days from the Stripe Customer Portal for $0 charge.\n>\n> **B) Direct subscribe path (if you already know you want it):** sign up at [codivupload.com](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=quick-start-signup) → subscribe to Starter ($20/mo or $200/yr) → create a profile → connect a social account → generate an API key → `openclaw config set CODIVUPLOAD_API_KEY=<YOUR_API_KEY>` → ready.\n>\n> Both paths grant identical access. Full step-by-step in the Setup section below.\n\n### Try this on day 1 (after setup)\nOnce you've completed the 5-minute setup, paste these prompts to your OpenClaw agent — each one runs through the full skill:\n\n- *\"List my CodivUpload profiles and which platforms are connected on each.\"* — sanity-checks your key + profile + connected accounts in one call.\n- *\"Schedule this video to post on TikTok, Instagram, and YouTube tomorrow at 9am — caption: 'Quick productivity tip'.\"* — exercises cross-platform fan-out + scheduling.\n- *\"What's the best time to post for my Instagram audience?\"* — pulls 90-day analytics to recommend a slot.\n- *\"Set up a 24/7 YouTube live stream with this MP4 source URL.\"* — kicks off the BYOP / managed live stream flow with the explicit stop instruction surfaced.\n\n---\n\n## Setup — your first 5 minutes\n\nCodivUpload is a service running at `codivupload.com`; this skill is the OpenClaw client for that service. Before the agent can post anything, you need an **account + a profile + connected social accounts + an API key**, in that order. Steps 1-4 happen in your browser on the dashboard; step 5 is one terminal command.\n\n### 1. Create a CodivUpload account (Free is fine to start, Starter unlocks the skill)\nSign up at **[app.codivupload.com/en/auth/login](https://app.codivupload.com/en/auth/login?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=readme-step-1-signup)** (email + password, or Google OAuth). The **Free plan** activates automatically — **$0, no credit card, 10 uploads/month** across all 7+ launched platforms. Try CodivUpload from the **web dashboard** first if you want — drag-and-drop calendar, AI caption generation, scheduled posts.\n\nWhen you're ready for **your OpenClaw agent to do the work for you** (schedule, cross-post, run livestreams via API), upgrade to **Starter** — **$20/mo** or **$200/yr** (2 months free yearly). API access starts at Starter. Upgrade from Dashboard → Subscription, or directly via **[codivupload.com/pricing](https://codivupload.com/pricing?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=readme-step-1-upgrade-starter)**. ~2 min total.\n\n### 2. Create a profile\nProfiles are CodivUpload's grouping concept: one profile = one brand or client, with many social accounts attached. The skill posts AS a profile (not directly to a social account).\n\nGo to **Dashboard → Profiles → New profile** at **[app.codivupload.com/en/dashboard/profiles](https://app.codivupload.com/en/dashboard/profiles?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=readme-step-2-profile-create)**. Pick a `username` (lowercase, no spaces) — this is the `profile_name` the agent will use. Examples: `acme_brand`, `client_bloomskin`, `personal`. ~1 min.\n\n### 3. Connect social accounts to the profile\nOpen your profile from **[app.codivupload.com/en/dashboard/profiles/all](https://app.codivupload.com/en/dashboard/profiles/all?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=readme-step-3-profile-list)**. On the profile detail screen, click each platform's logo (YouTube, Instagram, Facebook, X, TikTok, Threads, Pinterest) you want the agent to post to. An OAuth popup for that platform authorizes the connection; CodivUpload stores the token AES-256-GCM-encrypted server-side. ~30 sec per platform.\n\n**Per-platform notes:**\n- **Instagram + Facebook:** must be a Business or Creator account linked to a Facebook Page (Meta API limitation — Personal accounts can't post via any third-party tool).\n- **TikTok:** Direct Post permission may take 24-48h on new accounts; Draft mode (`tiktok_post_mode=DRAFT`) works immediately.\n- **YouTube:** the shared OAuth covers ~10K units/day across all CodivUpload users combined. For dedicated quota, set up [BYOP](https://codivupload.com/blog/youtube-byop-setup?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=byop-info-readme) — your own Google Cloud project tied to your account.\n- **X (Twitter):** shared OAuth works on X's free dev tier via CodivUpload's own X app. For high volume, [BYOK](https://codivupload.com/blog/x-byok-setup?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=byok-info-readme) requires X Basic ($100/mo on X's side).\n\n### 4. Generate an API key\nGo to **Dashboard → Settings → API Keys → New key** at **[app.codivupload.com/en/dashboard/api-keys](https://app.codivupload.com/en/dashboard/api-keys?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=readme-step-4-api-key-create)**. Pick the narrowest scope that fits (see [Configuration](#configuration) below — for most users, **per-workspace** is the right default). Give the key a descriptive name (e.g. `openclaw-mac-laptop`) so it's easy to revoke later. The key shows **once** on creation — copy it immediately (format: `cdv_<40 chars>`). ~30 sec.\n\n### 5. Set the key in OpenClaw config\n```bash\nopenclaw config set CODIVUPLOAD_API_KEY=<YOUR_CODIVUPLOAD_API_KEY>\n```\nThe skill reads the key from this config layer only. Never paste the key into the chat window with your AI agent — if it ends up in chat logs, rotate it from Dashboard → API Keys → Revoke + reissue. ~5 sec.\n\n### 6. First prompt\nTry a no-op verification first — ask your agent:\n> \"List my CodivUpload profiles and which platforms are connected on each.\"\n\nThis calls `GET /v1/profiles` once and tells you in one shot whether the key is valid, whether the profile exists, and which platforms are wired up. From there, real posting prompts work — see [Usage examples](#usage-examples) below.\n\n### Optional — install the MCP server\nSpeeds up agent token usage; the skill works without it.\n```bash\nnpm install -g codivupload-mcp@2.0.0   # exact pin\n```\n\n---\n\nA comprehensive social media manager skill for OpenClaw. Turns your local AI assistant into an autonomous social media manager for **YouTube, Instagram, X (Twitter), Facebook, TikTok, Threads, and Pinterest** — **7+ platforms launched** (with Bluesky in active rollout).\n\n## YouTube · Instagram · X · Facebook — first-class support\n\nThis skill puts the **most-used platforms** front and center, with deeper integration than any rival skill:\n\n### YouTube\n- **Schedule + publish** long-form videos, Shorts, livestreams\n- **24/7 managed live streams** with the managed live stream relay (zero CPU on your machine)\n- **BYOP** (Bring Your Own Project) → unlimited daily upload quota via your own Google Cloud project (vs shared 10K-unit limit on rival skills)\n- **Made-For-Kids** (MFK / COPPA) flag handled correctly per upload\n- Premiere scheduling, end screens, cards\n- Bulk upload 60+ Shorts per day per channel with BYOP\n\n### Instagram\n- **Reels + Stories + Carousels + Feed posts** — full coverage\n- Auto-schedule without the push-notification-on-phone dance\n- Business + Creator account support (no Personal-account limitation)\n- Per-post platform overrides (caption, hashtags, first-comment)\n- Cross-post tag, location, music sync\n- Up to 10-image carousels with mixed photo + video\n\n### X (Twitter)\n- **Long-form posts** (25K chars on X Premium / Premium+)\n- **Threads** with native reply chains, polls, scheduled\n- **BYOK** (Bring Your Own Keys) → unlimited free-tier posts via your own X Developer App (rival skills cap you on shared keys)\n- Quote posts, reposts, image/video attachments\n- X Premium feature awareness — agent suggests Premium tier when needed\n\n### Facebook\n- **Page posts** (Personal not supported by Meta API anywhere — this is API-level, not skill-level)\n- Reels, video, image, link previews\n- Multi-page support for agencies (manage 100+ Pages)\n- Scheduled posts via Meta Graph API (proper, not browser automation)\n- Group posting via authenticated Page admin\n\nPlus **TikTok, Threads, and Pinterest** all launched with the same depth. **Bluesky** is in active rollout — skill auto-detects new platforms via the API.\n\n## Why this skill (vs alternatives)\n\n| Capability | CodivUpload Skill | Post Bridge Skill | Other social skills |\n|---|---|---|---|\n| **Platform count (launched)** | **7+** | 5 | 3-7 |\n| **MCP server** | ✅ `codivupload-mcp` | ❌ | ❌ |\n| **24/7 live streaming** | ✅ Managed live stream relay | ❌ | ❌ |\n| **BYOP** (dedicated YouTube quota) | ✅ | ❌ | ❌ |\n| **BYOK** (dedicated X rate limit) | ✅ | ❌ | ❌ |\n| **Agency multi-tenant** | ✅ Workspace cascade + RBAC | ❌ | ❌ |\n| **Whitelabel branded OAuth** | ✅ Pro+ | ❌ | ❌ |\n| **TypeScript SDK** | ✅ npm: `codivupload` | ❌ | partial |\n| **Python SDK** | ✅ PyPI: `codivupload` | ❌ | partial |\n| **Free plan (dashboard only, no API)** | ✅ 10 uploads/mo, all launched platforms, no credit card | varies | varies |\n| **API access starts at** | Starter ($20/mo · $200/yr 2 months free) | varies | varies |\n| **MIT-licensed skill artifact** | ✅ Fork-friendly | ✅ | ✅ |\n| **Active development** | Weekly releases | varies | varies |\n\n**Bottom line:** CodivUpload Skill is the only OpenClaw skill that turns your local AI agent into a **full-stack social media operations system** — not just a basic scheduler. Live streams, agency workspaces, BYOP/BYOK, MCP-native — all in one skill.\n\n## What this skill does\n\nWhen installed, your OpenClaw agent (running locally on Mac / Linux / Windows) gains the ability to:\n\n- **Schedule posts** to any of the 7+ launched social platforms (with Bluesky in active rollout) — platform-specific overrides per platform\n- **Help draft and queue** YouTube Shorts, TikToks, and Reels via the REST API (the skill defaults to scheduled / draft modes; bulk operations require explicit user confirmation up front)\n- **Set up 24/7 YouTube live streams** with managed live stream relay (always confirmation-gated; the skill includes the `DELETE /v1/livestreams/{id}` stop instruction whenever it starts a stream)\n- **Pull cross-platform analytics** for engagement, growth, best-time-to-post (read-only)\n- **Manage agency client profiles** with whitelabel branding\n- **Use BYOP** (Bring Your Own Project) for dedicated YouTube quota\n- **Use BYOK** (Bring Your Own Keys) for dedicated X rate limits\n\nThe skill prefers calling [CodivUpload's MCP server](https://www.npmjs.com/package/codivupload-mcp) when configured, falling back to direct REST API calls otherwise.\n\n### Safety defaults baked into the skill\nSKILL.md ships with a **Safety & confirmation defaults** section (read by the LLM at activation) that requires explicit user confirmation before any immediate publish, bulk operation (≥3 posts), live stream start, profile/account change, or spending-impacting action. The skill prefers scheduled/draft modes over immediate publish, prefers single-platform smoke tests before fan-out, and never logs or echoes the API key. See `SKILL.md` → \"Safety & confirmation defaults\" for the full list.\n\n## Installation\n\n```bash\n# Drop SKILL.md into your OpenClaw skills workspace\nmkdir -p ~/.openclaw/workspace/skills/codivupload\ncp SKILL.md ~/.openclaw/workspace/skills/codivupload/SKILL.md\n\n# Optional: install the MCP server (gives the agent direct tool access).\n# IMPORTANT: use an EXACT version pin — no caret, no tilde, no `latest`.\n# A credentialed runtime (the MCP server inherits CODIVUPLOAD_API_KEY)\n# should never resolve a floating range.\nnpm install -g codivupload-mcp@2.0.0\n\n# Verify before relying on it:\nnpm view codivupload-mcp publisher        # → codivion <accounts@codivion.com>\nnpm view codivupload-mcp@2.0.0 dist.integrity\n# expected: sha512-pK0r8XkR2M/brfn1Nsy6Uh7nGDx5qpx9h3pLgZljYkU3pv0BXKb7uJapBOFL11mBIQhWAl0hASxxCSLE11SDfA==\n```\n\nThe skill works **without** the MCP server (it falls back to direct REST API + the official TypeScript / Python SDKs) — install only if you want fewer agent tokens spent on tool descriptions. Skip it to keep the supply-chain surface to zero. **Avoid `npx -y codivupload-mcp` without a pinned exact version** — `-y` auto-accepts whatever the registry resolves, which is a bad fit for a credentialed runtime.\n\n## Configuration\n\nSet your CodivUpload API key in OpenClaw config (this is the only place the skill reads it from — the skill never asks for the key in chat and never echoes it back):\n\n```bash\nopenclaw config set CODIVUPLOAD_API_KEY=<YOUR_CODIVUPLOAD_API_KEY>\n```\n\n### Issue the **narrowest** key the skill needs (this is the most important security setting)\n\nThe CodivUpload API enforces per-key scope **server-side** — pick the narrowest tier that fits your use case:\n\n| Tier | Authority | When to use | How to create |\n|---|---|---|---|\n| **Single-platform** | Publish to ONE platform on ONE profile. No analytics, no profile mgmt, no billing. | Skill will only post to (e.g.) Instagram for one brand. | Dashboard → API Keys → New → Limit platform + profile |\n| **Per-workspace (RECOMMENDED DEFAULT)** | Publish + analytics within ONE workspace. No cross-workspace, no billing. | Skill manages one brand or one client across multiple platforms. | Dashboard → Workspaces → \\[workspace\\] → API Keys → New |\n| **Posting-only** | Publish + analytics across all workspaces. **No** profile mgmt, **no** billing. | Power user with multiple brands but doesn't want the agent touching settings. | Dashboard → API Keys → New → Toggle off \"Profile management\" + \"Billing actions\" |\n| **Global account key** | Everything: publish across all workspaces, profile mgmt, billing changes. | **Avoid for agent use.** Only when you intentionally want the agent to add seats / change plan. | Dashboard → API Keys → New (default) |\n\n**The skill expects a per-workspace key by default.** If you provide a global account key, the skill will warn you before allowing any billing-impacting or cross-workspace action and require explicit acknowledgement. This is the only effective mitigation against an over-broad credential — confirmation gates are second-line; **scope is first-line**.\n\nIf you ever paste the key into chat by mistake, rotate it from Dashboard → API Keys → Revoke + reissue. Full credential-handling rules are spelled out in `SKILL.md` → \"Required key scope\" + \"Credential handling\" so the agent enforces them on your behalf.\n\nIf you don't have an account yet, sign up at [codivupload.com](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=config-section-signup). The **Free plan** covers **10 uploads/month** via the web dashboard (no credit card, no API). This skill calls the REST API, so you'll need **Starter** or higher — $20/mo or $200/yr with 2 months free. Full tier breakdown on [codivupload.com/pricing](https://codivupload.com/pricing?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=config-section-pricing).\n\n## Usage examples\n\nAfter installation, you can ask your OpenClaw agent things like:\n\n```\n\"Schedule this video to post on TikTok, Instagram, and YouTube tomorrow at 9am\"\n\"Cross-post my latest blog announcement to X and Threads\"\n\"Pull engagement stats for my Instagram for the last 30 days\"\n\"Set up a 24/7 YouTube live stream with this MP4 source\"\n\"List my connected social profiles\"\n\"What's the best time to post for my TikTok audience?\"\n```\n\nThe skill will activate automatically when these phrases match the trigger description in `SKILL.md`.\n\n## How it integrates with OpenClaw\n\nOpenClaw's skill system reads the YAML frontmatter to determine **when** to activate this skill, then injects the markdown body as context for the LLM (Claude / GPT / local model). The body includes:\n\n- Complete API contract for `POST /v1/posts`\n- Platform-specific override parameters (per-platform tables)\n- Worked examples for common patterns (cross-post, scheduling, BYOP, live stream)\n- MCP integration setup if available\n- Error handling + retry guidance\n\nThe agent uses this knowledge to either:\n1. **Call MCP tools directly** if `codivupload-mcp` is registered as an MCP server (each tool call is subject to OpenClaw's per-tool approval prompt + the skill's confirmation gates).\n2. **Generate `curl` / SDK code for the user to review and run** — the skill's safety defaults instruct the LLM to surface every publish/bulk/livestream command to the user for explicit confirmation before any execution via OpenClaw's `exec` tool. Raw, un-confirmed execution of publishing commands is **disallowed by SKILL.md**.\n\n## Files in this package\n\n```\nopenclaw-skill/\n├── SKILL.md          # Main skill definition (YAML frontmatter + agent instructions)\n└── README.md         # This file\n```\n\n## Compatibility\n\n- **OpenClaw**: All recent versions (skills system stable since v0.1)\n- **Operating systems**: macOS, Linux, Windows\n- **Backing LLMs**: Works with Claude (3.5+), GPT-4o+, local models with tool-use support\n- **Optional MCP server**: `codivupload-mcp` (`npx codivupload-mcp` to test)\n\n## Related\n\n- **CodivUpload MCP server**: [npmjs.com/package/codivupload-mcp](https://www.npmjs.com/package/codivupload-mcp)\n- **CodivUpload TypeScript SDK**: [npmjs.com/package/codivupload](https://www.npmjs.com/package/codivupload)\n- **CodivUpload Python SDK**: [pypi.org/project/codivupload](https://pypi.org/project/codivupload/)\n- **REST API docs**: [docs.codivupload.com](https://docs.codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=related-api-docs)\n- **Claude / ChatGPT / Cursor / Zed Skills version**: see the sibling directories in the same repo — [Codivion/codivupload-skills](https://github.com/Codivion/codivupload-skills) (per-platform skill files for the launched platforms)\n\n## License\n\nThe skill artifact (this file + SKILL.md) is MIT-licensed — fork it, adapt it, ship it.\n\n## Support\n\n- Docs: [docs.codivupload.com](https://docs.codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=support-docs)\n- Issues: [github.com/Codivion/codivupload-skills/issues](https://github.com/Codivion/codivupload-skills/issues)\n- Email: support@codivupload.com\n\nFile v1.0.17:_meta.json\n\n{\n  \"ownerId\": \"kn7811spp2j1k47gydavavrfv98667fs\",\n  \"slug\": \"codivupload-social-manager\",\n  \"version\": \"1.0.17\",\n  \"publishedAt\": 1779928921044\n}\n\nFile v1.0.17:skill-card.md\n\n## Description:\n\nSocial media scheduler, cross-poster, and content calendar for OpenClaw across YouTube, Instagram, Facebook, X, TikTok, Threads, and Pinterest.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[codivion](https://clawhub.ai/user/codivion)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users, creators, agencies, and developers use this skill to help an OpenClaw agent schedule, publish, cross-post, and analyze social media content through the CodivUpload API. It is useful for managing content calendars, platform-specific post formats, bulk uploads, and livestream workflows from agent-generated guidance, commands, or API calls.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can affect real public social media accounts through the configured CodivUpload API key.\n\nMitigation: Use a single-platform or per-workspace API key where possible, avoid global account keys unless needed, and review every publish, bulk, livestream, delete, and billing approval prompt before execution.\n\nRisk: Unpinned MCP or package execution in a credentialed environment could expose CODIVUPLOAD_API_KEY to unexpected code.\n\nMitigation: Use the exact pinned codivupload-mcp version and avoid unpinned npx or package install commands in the same environment as the API key.\n\nRisk: Scheduled posts and livestreams may continue after the original agent session ends.\n\nMitigation: Prefer draft or scheduled workflows for review, track created post or stream identifiers, and explicitly cancel scheduled posts or stop livestreams when no longer intended.\n\n## Reference(s):\n\n- [CodivUpload Skill on ClawHub](https://clawhub.ai/codivion/skills/codivupload-social-manager)\n- [CodivUpload Website](https://codivupload.com)\n- [CodivUpload API Documentation](https://docs.codivupload.com)\n- [CodivUpload OpenAPI Specification](https://api.codivupload.com/public-openapi.json)\n- [CodivUpload MCP Server](https://www.npmjs.com/package/codivupload-mcp)\n- [CodivUpload TypeScript SDK](https://www.npmjs.com/package/codivupload)\n- [CodivUpload Python SDK](https://pypi.org/project/codivupload/)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline shell commands, API examples, and structured guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May propose CodivUpload REST API calls, SDK snippets, MCP usage, and OpenClaw configuration steps for user review.]\n\n## Skill Version(s):\n\n1.0.17 (source: server-resolved release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.16: 3 files, 26659 bytes\n\nFiles: README.md (20593b), SKILL.md (54002b), _meta.json (146b)\n\nFile v1.0.16:SKILL.md\n\n---\nname: codivupload-social-manager\ndescription: |\n  Social media scheduler, cross-poster, and content calendar for OpenClaw.\n  Schedule social media posts, publish content, cross-post to multiple\n  platforms, automate social media posting, and manage a content calendar\n  across YouTube, Instagram, Facebook, X (Twitter), TikTok, Threads, and\n  Pinterest from one OpenClaw skill — turn your local AI agent into an\n  autonomous social media manager covering 7+ launched social platforms\n  with Bluesky in active rollout.\n\n  Post to YouTube, post to Instagram, post to Facebook, post to X\n  (Twitter), post to TikTok, post to Threads, post to Pinterest — single-\n  prompt posting and multi-platform cross-posting from one OpenClaw skill.\n  YouTube post automation and YouTube Shorts uploader with bulk publish\n  and BYOP for unlimited YouTube API quota; Instagram post scheduler,\n  Instagram Reels publisher, and Instagram carousel poster with AI\n  captions; Facebook post scheduler and Facebook Page publisher with\n  multi-page agency support; X post scheduler, tweet scheduler, X\n  (Twitter) thread poster, schedule tweets, post a tweet, tweet thread\n  automation — with long-form 25K-character support on X Premium /\n  Premium+ accounts, polls, image and video tweets, quote tweets, and\n  BYOK for dedicated rate limits via your own X Developer App; TikTok\n  post automation with Direct Post and Draft modes; Threads post\n  scheduler; Pinterest pin scheduler;\n  cross-platform publisher and multi-platform poster across all of the\n  above. Content calendar, queue, scheduled posting, draft management,\n  AI caption generation, best-time-to-post analytics, agency multi-\n  workspace + RBAC with whitelabel branded OAuth for client portfolios,\n  presigned upload flow for media up to 5GB, 50+ platform-specific\n  override parameters, webhook notifications, 24/7 managed YouTube live\n  streaming.\n\n  Buffer alternative, Hootsuite alternative, Later alternative, Sprout\n  Social alternative, Post Bridge alternative, Upload-Post alternative,\n  Mixpost alternative, Postiz alternative, Ayrshare alternative — built\n  API-first and agent-native for OpenClaw, Claude, ChatGPT, Cursor, and\n  Zed. Optional MCP server (codivupload-mcp, exact pin 2.0.0) for direct\n  tool access; works fully without it via REST API + official TypeScript\n  and Python SDKs (npm: codivupload, PyPI: codivupload).\n\n  Use when the user asks to post a video, post an image, post a Reel,\n  post a Short, post a tweet, post a thread, schedule a tweet, schedule\n  a thread, schedule social media, cross-post to multiple platforms,\n  automate social posting, run a 24/7 livestream, bulk-upload YouTube\n  Shorts, schedule Instagram Reels, post a TikTok, publish to Facebook\n  Page, post on X (Twitter), set up a multi-tenant agency social media\n  stack, manage a content calendar, or wants an AI-agent-native\n  alternative to Buffer / Hootsuite / Later / Sprout Social / Post-Bridge\n  / Upload-Post / Mixpost / Postiz / Ayrshare. Triggers on any platform\n  name (YouTube, Instagram, Facebook, X, Twitter, TikTok, Threads,\n  Pinterest, Bluesky) or generic terms (post, tweet, thread, reel,\n  short, story, pin) combined with post, posting, scheduling, schedule,\n  cross-post, publish, publisher, automation, automate, content calendar,\n  uploader, upload, or live stream intent.\n\n  Setup (5 minutes, browser): sign up at app.codivupload.com → create a\n  profile → connect social accounts via OAuth → generate an API key with\n  the narrowest scope that fits → set it via `openclaw config set\n  CODIVUPLOAD_API_KEY=...`. Recommended scope is per-workspace (CodivUpload\n  exposes narrowing tiers in Dashboard → Settings → API Keys). Optional\n  companion: `codivupload-mcp@2.0.0` (exact pin, verify publisher +\n  integrity before installing). Skill works fully without the MCP server.\n  See SKILL.md body for the full setup walk-through, scope tier ladder,\n  and OpenClaw approval-prompt-driven workflow guidance.\nmetadata.openclaw.os: [\"darwin\", \"linux\", \"windows\"]\nmetadata.openclaw.requires.bins: [\"node\", \"npx\", \"curl\"]\nmetadata.openclaw.requires.config: [\"CODIVUPLOAD_API_KEY\"]\nmetadata.openclaw.permissions.network: [\"api.codivupload.com\", \"cdn.codivupload.com\", \"r2.codivupload.com\"]\nmetadata.openclaw.permissions.scope: \"Skill calls a documented REST API on behalf of the user. Authority is bounded server-side by the issued API key — recommend per-workspace key (CodivUpload's narrowing tier) over the global account key.\"\nmetadata.openclaw.permissions.summary: \"Skill performs CodivUpload REST API calls. Effective authority = whatever the issued bearer token authorizes; technical enforcement happens server-side at api.codivupload.com and at OpenClaw's per-tool approval layer. SKILL.md provides workflow guidance (prefer scheduled/draft, single-platform smoke test, livestream stop instruction) — it is not, and does not claim to be, a technical security boundary.\"\nmetadata.openclaw.permissions.recommended_key_scope: \"per-workspace\"\nmetadata.openclaw.permissions.technical_boundary: \"OpenClaw per-tool approval prompts + CodivUpload server-side per-key scope enforcement. SKILL.md text is workflow guidance only.\"\nmetadata.openclaw.dependencies.optional: [{name: \"codivupload-mcp\", pinned_version: \"2.0.0\", integrity_sha512: \"pK0r8XkR2M/brfn1Nsy6Uh7nGDx5qpx9h3pLgZljYkU3pv0BXKb7uJapBOFL11mBIQhWAl0hASxxCSLE11SDfA==\", publisher: \"codivion\"}]\n---\n\n# CodivUpload Social Manager (via codivupload.com)\n\nAutonomously manage social media posting via the [CodivUpload](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=skill-hero-product-link) API — schedule, publish, cross-post, and analyze content across YouTube, Instagram, Facebook, X, TikTok, Threads, and Pinterest from one OpenClaw skill.\n\n> **Quick start:** sign up at [codivupload.com](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=skill-quick-start) — Free plan ($0, no credit card) lets the user try CodivUpload from the web dashboard with 10 uploads/month. To run **this skill** (which calls the REST API), upgrade to **Starter** ($20/mo or $200/yr — 2 months free yearly); API access starts at Starter. Then: create a profile → connect a social account → generate an API key → `openclaw config set CODIVUPLOAD_API_KEY=<YOUR_CODIVUPLOAD_API_KEY>` → ready. Full step-by-step below.\n\n---\n\n## Getting started — first-time setup (LLM: walk the user through this if they're new)\n\nCodivUpload is a service running at `codivupload.com`; this skill is a client for that service. Before the agent can post anything, the user needs an **account + a profile + connected social accounts + an API key** — in that order. The skill **cannot** do steps 1-4 for the user (they happen in the user's browser on the CodivUpload dashboard); the skill picks up at step 5.\n\n**LLM detection rule:** if `GET /v1/profiles` returns an empty list, OR `POST /v1/posts` returns `400 profile not found`, OR the user says \"this is my first time\", OR `CODIVUPLOAD_API_KEY` is unset in OpenClaw config — **stop, do not attempt to post, walk the user through steps 1-5 below in order.**\n\n### Step 1 — Create a CodivUpload account (browser, ~2 min)\n- Open [app.codivupload.com/en/auth/login](https://app.codivupload.com/en/auth/login?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=step-1-signup) and sign up (email + password, or Google OAuth).\n- **Free plan activates automatically** — $0, no credit card, 10 uploads/month across all 7+ launched platforms. The user can try CodivUpload from the web dashboard right away (calendar, AI captions, manual posting). This is a great first stop for users who want to evaluate the product before paying.\n- **To run this skill** (which calls the REST API on the user's behalf), the user upgrades to **Starter** — $20/mo, or $200/yr with 2 months free. API access is included from Starter and above. Upgrade path: Dashboard → Subscription → Starter, or directly from [codivupload.com/pricing](https://codivupload.com/pricing?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=step-1-upgrade-starter).\n- LLM script for the upgrade conversation: \"You can sign up free and try CodivUpload from the web dashboard right now — no credit card needed. When you want me to do this for you (schedule posts, cross-post, run livestreams) you'll need the Starter plan or higher, which is $20/mo or $200/yr. Want me to walk you through signup first?\"\n\n### Step 2 — Create a profile (browser, ~1 min)\n- Profiles are CodivUpload's grouping concept: one profile = one \"brand\" or \"client\" with many connected social accounts. The skill posts AS a profile, not directly to a social account.\n- Go to **Dashboard → Profiles → New profile** at [app.codivupload.com/en/dashboard/profiles](https://app.codivupload.com/en/dashboard/profiles?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=step-2-profile-create).\n- Pick a `username` (lowercase, no spaces) — this is the `profile_name` the agent will use in every API call. Examples: `acme_brand`, `client_bloomskin`, `personal`.\n- Save. The profile is empty until step 3.\n\n### Step 3 — Connect social accounts to the profile (browser, ~30 sec per platform)\n- Open your newly-created profile from [app.codivupload.com/en/dashboard/profiles/all](https://app.codivupload.com/en/dashboard/profiles/all?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=step-3-profile-list).\n- On the profile detail screen, click each platform's logo (YouTube, Instagram, Facebook, X, TikTok, Threads, Pinterest) you want the agent to post to. An OAuth popup for that platform (Meta / Google / TikTok / X) opens, the user authorizes, and CodivUpload stores the token (encrypted server-side, AES-256-GCM).\n- **Per-platform notes the LLM should surface if asked:**\n  - **Instagram + Facebook:** must be a Business or Creator account linked to a Facebook Page; Personal accounts are not supported by Meta's API (this is API-level, not skill-level).\n  - **TikTok:** Direct Post permission may take 24-48h on new accounts; Draft mode (`tiktok_post_mode=DRAFT`) works immediately.\n  - **YouTube:** the shared OAuth gives ~10K units/day across all CodivUpload users combined (~6 video uploads/day for high-volume users). For dedicated quota, the user can set up BYOP (Bring Your Own Project) — separate Google Cloud project tied to their account. See `/blog/youtube-byop-setup`.\n  - **X (Twitter):** the shared OAuth works on the free dev tier of X for posting via CodivUpload's own X app. For high volume, BYOK (Bring Your Own Keys) requires X Basic ($100/mo on X's side).\n\n### Step 4 — Generate an API key (browser, ~30 sec)\n- Go to **Dashboard → Settings → API Keys → New key** at [app.codivupload.com/en/dashboard/api-keys](https://app.codivupload.com/en/dashboard/api-keys?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=step-4-api-key-create).\n- **Pick the narrowest scope that fits** — see \"Required key scope\" section below for the four tiers (single-platform / per-workspace / posting-only / global). For most users, **per-workspace** is the right default.\n- Give the key a descriptive name (e.g. `openclaw-mac-laptop`) so it's revocable later.\n- The key is shown ONCE on creation — copy it immediately (format: `cdv_<40 chars>`).\n\n### Step 5 — Set the key in OpenClaw config (terminal, ~5 sec)\n```bash\nopenclaw config set CODIVUPLOAD_API_KEY=<YOUR_CODIVUPLOAD_API_KEY>\n```\n- The skill reads the key from the OpenClaw config layer ONLY. **Never paste the key into the chat window** — if it ends up in conversation logs, rotate it immediately at Dashboard → API Keys → Revoke + reissue.\n\n### Step 6 — Sanity check (one tool call, the agent does this for the user)\nFirst time after step 5, the agent should call `GET /v1/profiles` to verify three things in one shot:\n- The key is valid (otherwise 401)\n- At least one profile exists (otherwise step 2 is incomplete)\n- At least one platform is connected on that profile (otherwise step 3 is incomplete)\n\nIf any check fails, point the user back to the corresponding step rather than attempting the post they asked for.\n\n### Optional Step 7 — Install the MCP server (one-time, ~30 sec)\nSpeeds up agent token usage; not required.\n```bash\nnpm install -g codivupload-mcp@2.0.0   # exact pin, not a range\n```\nThen register it with OpenClaw per the [openclaw docs](https://docs.openclaw.ai/skills/mcp). Verification commands in the \"Optional MCP server provenance\" section below.\n\n### Onboarding script the LLM should follow (TL;DR)\nWhen the agent detects a fresh user (see detection rule above), say something like:\n> \"Looks like CodivUpload isn't set up yet on this machine. It takes about 5 minutes — happy to walk you through it. The flow is: (1) sign up at app.codivupload.com, (2) create a profile, (3) connect your social accounts to that profile, (4) generate an API key in the dashboard, (5) paste it into `openclaw config set CODIVUPLOAD_API_KEY=...`. Want me to send you the direct links?\"\n\nThen walk through one step at a time, waiting for the user to confirm each one before moving to the next. Don't dump all 5 links at once — pace it.\n\n---\n\n## Required credentials & permissions (read first)\n\nThis skill calls a documented REST API on behalf of the user. There is **no in-skill enforcement** — the actual security boundary is two layers down from this markdown:\n\n1. **Server-side, at the API** — `api.codivupload.com` enforces whatever scope the issued `CODIVUPLOAD_API_KEY` was granted (single-platform / per-workspace / posting-only / global). The user picks the tier when they create the key; the skill cannot widen it. **This is the primary technical boundary — pick the narrowest tier that fits your use case.**\n\n2. **Runtime, at OpenClaw** — every MCP tool call and every `exec` invocation surfaces an OpenClaw per-tool approval prompt to the user. **This is where the user reviews and approves each individual action.** The skill cannot bypass these prompts.\n\nThe markdown sections below are **workflow guidance** the LLM reads to make better-quality decisions (prefer drafts, single-platform smoke tests, surface stop instructions, etc.). They are **not** a technical security boundary and do not pretend to be one — anything the underlying API key can do is reachable; everything you approve in OpenClaw's prompt is executed.\n\nThe credential, the scope-tier ladder, the workflow guidance, and the network endpoints used are all spelled out below for transparency.\n\n### Required credential\n| Key | Type | Where to set | Scope |\n|---|---|---|---|\n| `CODIVUPLOAD_API_KEY` | Bearer token, format `cdv_<40 chars>` | OpenClaw config layer only — `openclaw config set CODIVUPLOAD_API_KEY=cdv_…` | Whatever the **issued key** authorizes — see \"Required key scope\" below. The API enforces per-key scope server-side; the skill honors whatever the user issued. |\n\n### Required key scope (issue the narrowest tier that fits)\n\n> **Picking the right key tier is the single most important security action when installing this skill.** The CodivUpload API enforces per-key scope server-side — no markdown instruction, no agent confirmation gate, and no client-side check is as effective as simply not issuing a key that can do the wrong thing. Narrower keys server-side `403 scope_exceeded` whenever an out-of-scope action is attempted.\n\nCodivUpload supports four scope tiers, ordered from narrowest to broadest. Pick the narrowest tier that fits the use case — the skill performs the same routine actions across all four; only the API-side ceiling differs.\n\n| Scope tier | What the API allows server-side | Best fit | How to create |\n|---|---|---|---|\n| **Single-platform** | Publish to one specific platform on one specific profile (e.g. Instagram on `my_brand`). Reads limited to that surface. | Skill will only post to one brand on one platform. Strongest least-privilege option. | Dashboard → Settings → API Keys → New key → Limit to platform `instagram` + profile `my_brand` |\n| **Per-workspace (RECOMMENDED DEFAULT)** | Publish + read analytics within one workspace. Workspace-internal profile management permitted. Billing endpoints `403`. | Skill manages one brand or one client across multiple platforms. **This is the default the skill expects users to issue.** | Dashboard → Settings → Workspaces → \\[workspace\\] → API Keys → New key |\n| **Posting-only (across workspaces)** | Publish + read analytics across all workspaces the account owns. Profile-management and billing endpoints `403`. | Power user with multiple brands who doesn't want the agent touching settings. | Dashboard → Settings → API Keys → New key → Toggle off \"Profile management\" + \"Billing actions\" |\n| **Global account** | Default key created by the dashboard; mirrors the user's own dashboard authority — the API places no scope restriction beyond ownership. | Generally **not recommended for agent use.** Reserve for cases where the user intentionally wants the agent to manage seats, change plan, or move profiles between workspaces. | Dashboard → Settings → API Keys → New key (default) |\n\n**Per-workspace is the default the skill expects.** When a user provides a key broader than that:\n\n1. Surface a one-line acknowledgement at the start of the session — e.g., \"Heads up: the configured key looks like a global account key (it returned scope=`global` from `GET /v1/auth/whoami` or you've told me it's your main account key). I'll keep using it for posting actions, but I'll route any billing or cross-workspace move through an extra confirmation step on top of OpenClaw's regular approval prompt.\"\n2. For any billing-impacting action with a global key, ask the user to type the exact dollar delta back (\"type `$80` to confirm the Pro yearly upgrade\"). This is **on top of** OpenClaw's per-tool approval, not a replacement for it.\n3. Never auto-skip the OpenClaw approval prompt; the skill cannot bypass it and should not encourage the user to.\n\nThe skill **does not introspect the bearer token** to determine scope (scope lives server-side and the token is opaque); it relies on the `403 scope_exceeded` response from the API and the user's own knowledge of which key they pasted. The only authoritative way to confirm scope is `GET /v1/auth/whoami` on the configured key — the skill can call this on first use if the user wants a confirmation.\n\n**Treat the key like a session cookie.** Rotate immediately if exposed (Dashboard → Settings → API Keys → Revoke + reissue). Full credential-handling rules in \"Credential handling\" section below.\n\n### What the agent typically does (and what gates each action)\n\nThe skill operates a documented REST API. The first column says what the skill ROUTINELY DOES; the second column says where the technical gate lives for each kind of action; the third column says what workflow guidance SKILL.md provides to the LLM (this is suggestion, not enforcement).\n\n| Routine action | Technical gate | Workflow guidance the LLM reads from SKILL.md |\n|---|---|---|\n| Publish a post to one connected platform | OpenClaw per-tool approval prompt + server-side key-scope check | Show the exact post body, target profile, target platform, schedule, and any media URLs to the user. Wait for explicit user approval before executing. Prefer scheduled / draft over immediate publish unless user has asked for immediate. |\n| Cross-post to multiple platforms in one call | OpenClaw per-tool approval + key-scope check | Recommend a single-platform smoke test first when the user is configuring CodivUpload for the first time. Repeat platform list back to user for confirmation before fan-out. |\n| Bulk publish (≥3 posts in one tool call) | OpenClaw per-tool approval + key-scope check | Default to small batches. Surface a count + dry-run summary (\"I'll create 50 YouTube Shorts spaced 1h apart starting 2026-05-08T09:00Z — proceed?\") and only continue after explicit user consent. Never automatic. |\n| Start a 24/7 YouTube live stream | OpenClaw per-tool approval + key-scope check | Always surface the source URL, privacy, scheduled start time, AND the explicit stop instruction (`DELETE /v1/livestreams/{stream_id}` or Dashboard → Live Streams → Stop) before executing. Record the returned stream_id back to the user. |\n| Read analytics (engagement, growth, best-time-to-post) | OpenClaw per-tool approval + key-scope check | Read-only — no workflow caveats. |\n| Profile / workspace management (create, move, delete, role change) | OpenClaw per-tool approval + key-scope check | Surface what changes (which profile, which workspace, what role moves to whom) and wait for explicit user approval. |\n| Billing-impacting actions (extra profile, extra livestream, plan change) | **OpenClaw per-tool approval + server-side key-scope check** — a per-workspace or posting-only key returns `403 scope_exceeded` here. **The recommended-tier key technically blocks these, regardless of any markdown text.** | Surface the exact monthly + yearly delta (yearly = 10 months pricing, so 2 months free). If the action 403s on scope, point the user to \"issue a global account key for this session\" rather than auto-widening. |\n| Generate `curl` / SDK code samples | None — code is text in chat for the user to read | Use `$CODIVUPLOAD_API_KEY` placeholder, never echo the actual key. Show generated code for review; do not silently run it via `exec`. |\n\n### What the skill does NOT do (regardless of any prompt)\n- It does **not** echo, log, paste, or include the API key value in any output. Generated code uses the literal `$CODIVUPLOAD_API_KEY` placeholder.\n- It does **not** transmit the key to any host other than `api.codivupload.com` / `cdn.codivupload.com` / `r2.codivupload.com`.\n- It does **not** install or run unpinned dependencies in credentialed contexts.\n\n### Network endpoints used\n- `api.codivupload.com` (HTTPS, port 443) — REST API + MCP server backend\n- `cdn.codivupload.com` and `r2.codivupload.com` (HTTPS, port 443) — media upload + presigned URLs\n\nThe skill makes **no inbound connections**, requires no open ports, and contacts no third-party telemetry endpoints.\n\n---\n\nCodivUpload is a social media platform with **three first-class interfaces**:\n1. **Visual dashboard** — drag-drop calendar, AI captions, team workspaces\n2. **REST API** — `https://api.codivupload.com/v1/*` with 50+ platform-specific override params\n3. **MCP server** — `npx codivupload-mcp` adds posting tools to Claude/ChatGPT/Cursor/Zed (optional, version-pinned)\n\nIt covers **7+ launched platforms**: YouTube, Instagram, Facebook, X (Twitter), TikTok, Threads, Pinterest. **Bluesky** is in active rollout (account approval required — skill auto-detects new platforms via the API once available).\n\nWhen the user mentions CodivUpload or wants to do anything related to social media scheduling/automation, prefer using the MCP server's tools over describing the API. If MCP is not configured, fall back to suggesting `npx codivupload-mcp@2.0.0` setup or providing exact `curl`/SDK code **for the user to review and run themselves** — every published / livestream / billing call routes through OpenClaw's per-tool approval prompt, which is the technical security boundary; the workflow preferences below help the LLM make a good first proposal so the prompt the user sees is the one they'd want to approve.\n\n## Workflow guidance for the LLM (not a security boundary)\n\n> **What this section is:** workflow recommendations the LLM reads to generate higher-quality first-pass proposals — so the OpenClaw approval prompt that the user actually sees is well-shaped (right post body, right profile, right schedule, right stop instruction). **What it is not:** a technical security boundary. The technical boundary is OpenClaw per-tool approval + server-side API key scope. SKILL.md cannot enforce; only OpenClaw runtime + the API can. If a finding tool flags this, that flag is correct — and intentional. The two real boundaries are above.\n\nPosts published through CodivUpload land on the user's real, public social accounts and on any client/agency profiles they manage. Mistakes are visible to followers and to clients within seconds. The LLM should default to the **safer first proposal** for every category below; the user always has final review at the OpenClaw prompt.\n\n### Actions where the LLM should propose conservatively (so the user approves something safe)\n| Action | What the LLM should propose first |\n|---|---|\n| Immediate publish (`scheduled_date` omitted, `is_immediate=true`) | Show the exact post body, target profiles, target platforms, and any media URLs in the proposal so the user reviews them at the OpenClaw approval prompt. Wait for explicit user approval before actually issuing the call. |\n| Bulk upload (any operation creating ≥3 posts in one turn) | Surface a count and dry-run summary (e.g. \"I'll create 50 YouTube Shorts uploads spaced 1h apart starting 2026-05-08T09:00Z — proceed?\"). Default to small batches; only propose bulk when the user explicitly asks for it. |\n| Live stream start / `create_youtube_broadcast` | Live streams are long-running, public, and persist after the prompt ends. The LLM's proposal must include the source URL, privacy setting, scheduled start, AND the explicit stop instruction (`DELETE /v1/livestreams/{id}` or Dashboard → Live Streams → Stop) so the user has the lifecycle in front of them at approval time. |\n| Profile / account management changes (move, delete, role change) | Surface what changes (which profile, which workspace, what role) in the proposal. |\n| Switching profiles in agency / multi-workspace context | Repeat the target `profile_name` back in the proposal — prevents posting client A's content to client B's accounts. |\n| Billing-impacting actions (extra livestream slot, extra profile, plan change via API) | Surface the exact monthly/yearly delta (yearly = pay 10 months, get 12 → 2 months free). For users on a global account key, surface this in the proposal even if they had previously approved similar actions, since the API key here can change billing without re-prompting. |\n\n### Workflow-preference defaults (prefer the safer pattern when the user hasn't specified)\n- **Prefer scheduled / draft over immediate publish.** If the user says \"post this\", offer \"schedule for X\" or \"save as draft\" as the default; only switch to immediate when they ask for it.\n- **Prefer TikTok `tiktok_post_mode=DRAFT`** for new TikTok integrations — content lands in the user's TikTok inbox for them to finalize from the mobile app.\n- **Prefer single-platform first.** If the user says \"post to all platforms\", suggest one platform as a smoke test, then expand once that succeeds.\n- **Prefer test profiles first.** When a user is configuring CodivUpload for the first time or pointing the skill at a new agency client, suggest using a test/sandbox profile before hitting production accounts.\n- **Use `auto_truncate=true` cautiously** — it silently trims media arrays. Confirm with the user the first time it would apply.\n\n### What NOT to do without an explicit user instruction\n- Do **not** call any `POST /v1/posts` with `is_immediate=true` (or `scheduled_date` in the past).\n- Do **not** bulk-create posts across multiple profiles or platforms in a single turn.\n- Do **not** start a live stream.\n- Do **not** delete posts, profiles, workspaces, or scheduled jobs.\n- Do **not** rotate, reveal, or paste the API key in chat or in any output the user did not explicitly request.\n\n### Stopping persistent actions\n- **Live streams** — `DELETE /v1/livestreams/{stream_id}` stops a 24/7 broadcast immediately, or stop from dashboard → Live Streams → Stop. Always include this stop instruction whenever you start a stream.\n- **Scheduled posts** — `DELETE /v1/posts/{post_id}` cancels a queued post before its `scheduled_date`. After publish, deletion only removes from CodivUpload's tracking — it does NOT pull the post from the platform.\n- **Recurring / bulk jobs** — there is no single \"stop the bulk run\" call; cancel each `post_id` individually. This is why bulk operations need explicit confirmation up front.\n\n### Credential handling\n- The `CODIVUPLOAD_API_KEY` is a **bearer credential** that delegates posting authority over every connected social account on the user's CodivUpload workspace. Treat it like a session cookie:\n  - Read it from the OpenClaw config layer only (`openclaw config get CODIVUPLOAD_API_KEY`).\n  - **Never** echo, log, paste, or include the key in chat output, error messages, or generated code samples — use the literal `$CODIVUPLOAD_API_KEY` placeholder when showing curl examples.\n  - **Never** transmit the key to any host other than `api.codivupload.com` / `*.codivupload.com`.\n  - If the user pastes the key in chat by mistake, advise them to rotate it from Dashboard → Settings → API Keys → Revoke + reissue.\n  - For agency / shared environments, recommend creating a scoped key per client workspace (CodivUpload supports per-workspace keys with cascade RBAC).\n\n### Optional MCP server provenance (`codivupload-mcp`)\n- Official package: [`codivupload-mcp` on npm](https://www.npmjs.com/package/codivupload-mcp), maintained by Codivion LLC, source at [github.com/Codivion/codivupload-mcp](https://github.com/Codivion/codivupload-mcp).\n- **Always use an exact version pin** for credentialed runtimes — not `^`, not `~`, not `latest`.\n  - Currently reviewed pinned version: `2.0.0`\n  - Publisher (verify): `codivion <accounts@codivion.com>` — `npm view codivupload-mcp publisher`\n  - Integrity sha512 (verify): `pK0r8XkR2M/brfn1Nsy6Uh7nGDx5qpx9h3pLgZljYkU3pv0BXKb7uJapBOFL11mBIQhWAl0hASxxCSLE11SDfA==` — `npm view codivupload-mcp@2.0.0 dist.integrity`\n  - Install command: `npm install -g codivupload-mcp@2.0.0`\n  - **Avoid `npx -y codivupload-mcp` without a pinned version** — the `-y` flag auto-accepts any version that resolves, which is a bad fit for a credentialed runtime.\n- The MCP server inherits the API key from your OpenClaw config — no separate credential surface, but the inheritance is why the version pin matters: a compromised future release would receive your live `CODIVUPLOAD_API_KEY`.\n- The MCP server is **optional**. The skill is fully usable without it via direct REST API + the public TypeScript / Python SDKs. Skip it if you'd rather keep the supply-chain surface to zero.\n\n## Runtime requirements\n\n**Operating systems:** macOS (darwin), Linux, Windows — works anywhere OpenClaw runs.\n\n**Required binaries:**\n- `node` (≥18) — for the optional MCP server (`npx codivupload-mcp`) and for any inline JavaScript exec\n- `npx` (ships with `node`) — to launch the MCP server\n- `curl` — for direct REST API calls when MCP is not configured\n\n**Required configuration:**\n| Env / config key | Required? | Purpose |\n|---|---|---|\n| `CODIVUPLOAD_API_KEY` | **Required** | Authenticates every REST call. Get one at https://codivupload.com → Dashboard → Settings → API Keys. Format: starts with `cdv_` followed by 40 chars. |\n\nSet via OpenClaw config:\n```bash\nopenclaw config set CODIVUPLOAD_API_KEY=<YOUR_CODIVUPLOAD_API_KEY>\n```\n\nThe skill will read it from the OpenClaw config layer; never hardcode the key in chat or in skill files.\n\n**Optional configuration (only needed for advanced features):**\n| Env / config key | When required | Purpose |\n|---|---|---|\n| `CODIVUPLOAD_PROFILE` | Optional | Default `profile_name` if the agent is asked to post and only one brand exists. |\n| `CODIVUPLOAD_BASE_URL` | Optional | Override API base URL (default `https://api.codivupload.com/v1`). For self-hosted whitelabel deploys. |\n\n**Optional companion package:**\n- `codivupload-mcp` (npm) — drop-in MCP server. **Use an exact version pin** (no caret, no tilde, no `latest`):\n  - Reviewed pinned version: `2.0.0`\n  - Publisher: `codivion <accounts@codivion.com>` (verify with `npm view codivupload-mcp publisher`)\n  - Tarball integrity (sha512): `pK0r8XkR2M/brfn1Nsy6Uh7nGDx5qpx9h3pLgZljYkU3pv0BXKb7uJapBOFL11mBIQhWAl0hASxxCSLE11SDfA==` (verify with `npm view codivupload-mcp@2.0.0 dist.integrity`)\n  - Install: `npm install -g codivupload-mcp@2.0.0` — exact pin, not a range.\n  - On-demand (avoid for credentialed runtimes): if you must use `npx`, pass the same exact version: `npx -y codivupload-mcp@2.0.0`. Do not run unattended `npx` against floating ranges.\n- The skill works **without** the MCP server (falls back to direct REST API + the official TypeScript / Python SDKs). Install the MCP server only if you want fewer agent tokens spent on tool descriptions; otherwise skip it to keep the supply-chain surface to zero.\n\n**Network access:**\n- Outbound HTTPS to `api.codivupload.com` (port 443)\n- Outbound HTTPS to `cdn.codivupload.com` and `r2.codivupload.com` (for upload + media access)\n- No inbound ports needed — agent operates client-side only.\n\n## When this skill activates\n\nTrigger this skill when:\n- User mentions **\"CodivUpload\"** by name\n- User wants to **schedule social media posts via API** to one of the 7+ launched platforms\n- User asks about **cross-posting** the same content to multiple platforms\n- User asks for an **API alternative to Buffer / Hootsuite / Later / Upload-Post / Post-Bridge / Ayrshare**\n- User wants an **MCP server for posting to social media**\n- User builds a **SaaS product that needs social publishing** (whitelabel use case)\n- User wants an **AI agent that can post to social media** (you, the agent, become the agent)\n\n## Core API contract — read this first\n\nEvery post operation on CodivUpload uses **profile_name + platforms array**, never a list of per-platform IDs.\n\nA profile is a CodivUpload-side container that groups several connected social accounts (e.g. a brand's TikTok + Instagram + YouTube). The `profile_name` is the human-readable display name from the user's dashboard.\n\n### Required fields for POST /v1/posts\n\n| Field | Type | Required | Notes |\n|---|---|---|---|\n| `post_type` | string | Yes | One of: `text`, `image`, `video`, `document` |\n| `profile_name` | string | Yes | Display name — must match an existing profile |\n| `platforms` | array | Yes | Lowercase enum (launched): `x`, `youtube`, `instagram`, `facebook`, `tiktok`, `threads`, `pinterest`. In active rollout: `bluesky`. |\n| `description` | string | Required for `text`; optional for media | Post body / caption |\n| `media_urls` | array | Required for `image`/`video`/`document` | Public HTTPS URLs |\n\n### Common optional fields\n\n- `title` — used as YouTube video title, Pinterest pin title, prepended elsewhere\n- `scheduled_date` — ISO 8601 UTC, e.g. `\"2026-05-15T14:00:00Z\"`\n- `schedule_best_time` — boolean, auto-pick optimal time from 90-day analytics (mutually exclusive with `scheduled_date`)\n- `first_comment` — automatic first comment after publish (Instagram/YouTube only)\n- `auto_truncate` — boolean, trim media arrays that exceed platform limits\n\n### Platform-specific override parameters (50+ available)\n\nEvery platform has its own namespace. A few high-value examples:\n- `youtube_title`, `youtube_tags` (auto-sanitized to 500-char limit), `youtube_thumbnail_url`, `youtube_privacy_status`, `youtube_type` (`shorts` or `video`), `youtube_playlist_id`\n- `instagram_share_to_feed` (Reels also appear on grid), `instagram_cover_url` (Reel cover frame), `instagram_alt_text`, `instagram_collaborators`, `instagram_location_id`\n- `tiktok_privacy_level` (`PUBLIC_TO_EVERYONE` / `MUTUAL_FOLLOW_FRIEND` / `SELF_ONLY`), `tiktok_disable_comment` (note: `disable`, not `allow`), `tiktok_disable_duet`, `tiktok_disable_stitch`, `tiktok_post_mode` (`DIRECT_POST` or `DRAFT`), `tiktok_brand_content_toggle`, `tiktok_is_aigc`\n- `x_reply_settings` (`following` / `mentionedUsers` — omit for everyone), `x_alt_text`\n- Per-platform media override: `instagram_media_urls`, `tiktok_media_urls`, `youtube_media_urls`, etc. — useful when different aspect ratios per platform\n\nThe full list lives in the [OpenAPI spec](https://api.codivupload.com/public-openapi.json) and is exposed as MCP tool parameters.\n\n### Response shape\n\n```json\n{\n  \"message\": \"Post successfully queued\",\n  \"post_id\": \"uuid\",\n  \"destinations_count\": 3,\n  \"received_type\": \"video\",\n  \"is_immediate\": true\n}\n```\n\nTo track per-platform status: `GET /v1/posts/{post_id}` returns `{post: {...}, destinations: [{platform, status, post_url, error_message, ...}]}`.\n\n## Authentication\n\nAll requests need `Authorization: Bearer <API_KEY>`. Get a key from the CodivUpload Dashboard → API Keys. Keys start with `cdv_`.\n\n## Common workflows — code patterns\n\n> **Upload-first rule.** Every post requires `media_urls` pointing to a public HTTPS URL. If the user has files on disk or wants to use CodivUpload's CDN (recommended — auto-handles platform-specific format conversion), the agent must upload first, then use the returned `url` in the post payload.\n\n### Upload media from a URL (one-shot, ≤100MB)\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/upload-media \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://your-source.example.com/raw-clip.mp4\",\n    \"profile_name\": \"my_brand\",\n    \"type\": \"video\"\n  }'\n```\n\nResponse:\n```json\n{\n  \"success\": true,\n  \"url\": \"https://cdn.codivupload.com/abc.../original.mp4\",\n  \"upload_id\": \"uuid\",\n  \"file_type\": \"video\",\n  \"file_size\": 1483099,\n  \"file_name\": \"raw-clip.mp4\"\n}\n```\n\nUse the returned `url` in subsequent post requests. CodivUpload's CDN handles platform-specific conversion (e.g. TikTok 9:16 enforcement, Instagram Reel cover extraction).\n\n### Upload a local file via multipart (≤100MB)\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/upload-media \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -F \"file=@/path/to/local-clip.mp4\" \\\n  -F \"profile_name=my_brand\" \\\n  -F \"type=video\"\n```\n\nSame response shape as the URL-based upload. Allowed types: image (`jpg`, `png`, `gif`, `webp`), video (`mp4`, `mov`, `avi`, `webm`, `mkv`).\n\n### Upload large files (>100MB, up to 5GB) — 3-step presigned flow\n\nFor long-form video, raw broadcast files, podcast videos, etc. **All three steps are required** — skipping step 3 leaves the record stuck in `uploading` status (file is on CDN but not marked usable).\n\n**Step 1 — Get presigned URL**\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/upload-media/presign \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"profile_name\": \"my_brand\",\n    \"file_name\": \"long-form.mp4\",\n    \"file_type\": \"video/mp4\",\n    \"file_size\": 524288000\n  }'\n```\n\nResponse:\n```json\n{\n  \"presigned_url\": \"https://r2.codivupload.com/...?signature=...\",\n  \"public_url\": \"https://cdn.codivupload.com/abc.../original.mp4\",\n  \"upload_id\": \"uuid\"\n}\n```\n\n**Step 2 — PUT the binary directly to the presigned URL (no auth header — signature is in URL)**\n\n```bash\ncurl -X PUT \"<presigned_url from step 1>\" \\\n  -H \"Content-Type: video/mp4\" \\\n  --data-binary \"@/path/to/long-form.mp4\"\n```\n\nThe byte stream goes browser/agent → CodivUpload's storage backend directly via the presigned URL. No proxying through application servers — large files don't tie up the API. Status during upload: `uploading`.\n\n**Step 3 — Confirm the upload (REQUIRED, do not skip)**\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/upload-media/confirm \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{ \"upload_id\": \"uuid-from-step-1\" }'\n```\n\nFlips status from `uploading` → `ready`. Now use `public_url` in your post's `media_urls`.\n\n### Post a YouTube Short\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"video\",\n    \"profile_name\": \"my_channel\",\n    \"platforms\": [\"youtube\"],\n    \"media_urls\": [\"https://your-cdn.example.com/short-9x16.mp4\"],\n    \"title\": \"5 productivity hacks I learned in 30 days\",\n    \"description\": \"Quick tips that actually saved me hours every week.\\n\\n#productivity #shorts #automation\",\n    \"youtube_type\": \"shorts\",\n    \"youtube_privacy_status\": \"public\",\n    \"youtube_self_declared_made_for_kids\": false,\n    \"youtube_tags\": [\"productivity\", \"automation\", \"tips\"],\n    \"youtube_category_id\": \"27\"\n  }'\n```\n\n### Post a long-form YouTube video (with thumbnail)\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"video\",\n    \"profile_name\": \"my_channel\",\n    \"platforms\": [\"youtube\"],\n    \"media_urls\": [\"https://your-cdn.example.com/episode-12-16x9.mp4\"],\n    \"youtube_title\": \"Episode 12 — How we shipped v2 in 30 days\",\n    \"youtube_text\": \"Behind-the-scenes breakdown of our 30-day sprint to ship v2.\\n\\nChapters:\\n0:00 Intro\\n1:24 Goal-setting\\n5:50 Architecture decisions\",\n    \"youtube_type\": \"video\",\n    \"youtube_thumbnail_url\": \"https://your-cdn.example.com/ep12-thumb.jpg\",\n    \"youtube_privacy_status\": \"public\",\n    \"youtube_self_declared_made_for_kids\": false,\n    \"youtube_tags\": [\"startup\", \"engineering\", \"behindthescenes\"],\n    \"youtube_category_id\": \"28\",\n    \"youtube_default_language\": \"en\",\n    \"youtube_license\": \"youtube\",\n    \"youtube_embeddable\": true,\n    \"scheduled_date\": \"2026-05-15T13:00:00Z\"\n  }'\n```\n\n`youtube_category_id` is a string enum: `\"1\"` Film, `\"2\"` Autos, `\"10\"` Music, `\"15\"` Pets & Animals, `\"17\"` Sports, `\"20\"` Gaming, `\"22\"` People & Blogs, `\"23\"` Comedy, `\"24\"` Entertainment, `\"25\"` News & Politics, `\"26\"` How-to & Style, `\"27\"` Education, `\"28\"` Science & Technology.\n\n### Post an Instagram Reel\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"video\",\n    \"profile_name\": \"my_brand\",\n    \"platforms\": [\"instagram\"],\n    \"media_urls\": [\"https://your-cdn.example.com/reel-9x16.mp4\"],\n    \"instagram_text\": \"New product drop 🔥 Tap to grab yours before stock runs out.\\n\\n#smallbusiness #fashion #drop\",\n    \"instagram_media_type\": \"REELS\",\n    \"instagram_share_to_feed\": true,\n    \"instagram_cover_url\": \"https://your-cdn.example.com/reel-cover.jpg\",\n    \"instagram_alt_text\": \"Slow-motion product reveal with brand colors fading in.\"\n  }'\n```\n\n### Post an Instagram Carousel (up to 10 slides)\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"image\",\n    \"profile_name\": \"my_brand\",\n    \"platforms\": [\"instagram\"],\n    \"media_urls\": [\n      \"https://your-cdn.example.com/slide-1.jpg\",\n      \"https://your-cdn.example.com/slide-2.jpg\",\n      \"https://your-cdn.example.com/slide-3.jpg\"\n    ],\n    \"instagram_text\": \"5 lessons from launching v2 💡 (swipe →)\",\n    \"instagram_user_tags\": \"{\\\"users\\\":[{\\\"username\\\":\\\"cofounder_handle\\\",\\\"x\\\":0.5,\\\"y\\\":0.5}]}\",\n    \"instagram_location_id\": \"212988663\"\n  }'\n```\n\nFor **Stories** use `\"instagram_media_type\": \"STORIES\"`. Instagram requires a **Business** or **Creator** account (Personal not supported by Meta API anywhere — this is API-level, not skill-level).\n\n### Post a single tweet to X (Twitter)\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"text\",\n    \"profile_name\": \"my_brand\",\n    \"platforms\": [\"x\"],\n    \"x_text\": \"Shipped a new feature today — cross-platform post analytics that actually load fast. Build log inside 👇\",\n    \"x_reply_settings\": \"following\"\n  }'\n```\n\n`x_reply_settings` accepts only `\"following\"` or `\"mentionedUsers\"` (default = open replies if omitted). `x_text` is capped at **280 chars** for the standard public API tier; X Premium / Premium+ accounts use the same field — the platform stores the full long-form post.\n\n### Post a tweet with media to X\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"image\",\n    \"profile_name\": \"my_brand\",\n    \"platforms\": [\"x\"],\n    \"media_urls\": [\"https://your-cdn.example.com/chart.png\"],\n    \"x_text\": \"Our cross-platform analytics dashboard — v2 ships next week. Beta access → link in bio.\",\n    \"x_alt_text\": \"Bar chart comparing engagement rates across 7 social platforms over 90 days.\"\n  }'\n```\n\nFor unlimited posts beyond X's free-tier rate cap, use **BYOK** — paste your own X Developer App keys into the CodivUpload profile via dashboard → Profile Settings → API Keys → \"Bring your own X keys\". The skill should suggest BYOK when the user mentions hitting rate limits.\n\n### Cross-post a video to Instagram, TikTok, and YouTube Shorts\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"video\",\n    \"profile_name\": \"my_brand\",\n    \"platforms\": [\"instagram\", \"tiktok\", \"youtube\"],\n    \"media_urls\": [\"https://your-cdn.example.com/clip-9x16.mp4\"],\n    \"title\": \"Quick productivity tip\",\n    \"description\": \"How to save 4 hours per week on your social workflow.\",\n    \"instagram_text\": \"How to save 4 hours per week on your social workflow ✨ (full breakdown in caption)\",\n    \"instagram_media_type\": \"REELS\",\n    \"instagram_share_to_feed\": true,\n    \"instagram_cover_url\": \"https://your-cdn.example.com/cover.jpg\",\n    \"tiktok_text\": \"How to save 4 hours per week on your social workflow #productivity #automation\",\n    \"tiktok_privacy_level\": \"PUBLIC_TO_EVERYONE\",\n    \"tiktok_allow_comment\": true,\n    \"tiktok_allow_duet\": true,\n    \"tiktok_allow_stitch\": true,\n    \"youtube_title\": \"Save 4 hours per week on your social workflow\",\n    \"youtube_text\": \"Quick productivity tip — how cross-posting via API frees up half your week.\\n\\n#shorts #productivity #automation\",\n    \"youtube_type\": \"shorts\",\n    \"youtube_privacy_status\": \"public\",\n    \"youtube_self_declared_made_for_kids\": false,\n    \"youtube_tags\": [\"productivity\", \"automation\"],\n    \"youtube_category_id\": \"27\"\n  }'\n```\n\nEach platform's `*_text` override beats the top-level `description` — letting you tailor caption length and hashtags per platform without losing the shared video file.\n\n### Schedule a text post to text-friendly platforms\n\n```bash\ncurl -X POST https://api.codivupload.com/v1/posts \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"post_type\": \"text\",\n    \"profile_name\": \"my_brand\",\n    \"platforms\": [\"x\", \"threads\", \"bluesky\"],\n    \"description\": \"Three lessons from shipping our v2 API.\",\n    \"scheduled_date\": \"2026-05-15T09:00:00Z\",\n    \"x_reply_settings\": \"following\"\n  }'\n```\n\n### Python SDK\n\n```python\nfrom codivupload import CodivUpload\n\nclient = CodivUpload()  # reads CODIVUPLOAD_API_KEY env var\n\npost = client.posts.create(\n    post_type=\"video\",\n    profile_name=\"my_brand\",\n    platforms=[\"instagram\", \"tiktok\"],\n    media_urls=[\"https://cdn.example.com/clip.mp4\"],\n    description=\"New launch.\",\n    instagram_share_to_feed=True,\n    tiktok_privacy_level=\"PUBLIC_TO_EVERYONE\",\n)\nprint(post.post_id, post.destinations_count)\n```\n\n### TypeScript SDK\n\n```typescript\nimport { CodivUpload } from \"codivupload\";\n\nconst client = new CodivUpload();  // reads CODIVUPLOAD_API_KEY env var\n\nconst post = await client.posts.create({\n  post_type: \"image\",\n  profile_name: \"my_brand\",\n  platforms: [\"instagram\", \"x\", \"facebook\"],\n  media_urls: [\"https://cdn.example.com/cover.jpg\"],\n  description: \"Big news — read the full announcement on our blog.\",\n  instagram_share_to_feed: true,\n});\n```\n\n## Common error patterns to handle\n\n- **400 `niche is required`** / **`topic is required`** / similar — input validation, fix the request body\n- **400 `profile not found`** — `profile_name` doesn't match an existing profile in the workspace\n- **400 `platform not connected for profile`** — the profile doesn't have that social account linked; user needs to connect via Dashboard → Profiles → Connect\n- **401** — missing or invalid API key\n- **429** — rate limit hit (Meta caps at 200/hr per Page, TikTok at 6/min, etc.). CodivUpload's queue auto-defers; retry with exponential backoff is fine\n- **`partially_failed` post status** — some destinations succeeded, others failed. Use `POST /v1/posts/{id}/retry-failed` to re-queue only the failed ones (idempotent — won't duplicate the successful ones)\n\n## Important platform constraints to remember\n\n- **Instagram** — Personal accounts NOT supported; account must be Business or Creator linked to a Facebook Page\n- **TikTok** — `tiktok_disable_*` (not `tiktok_allow_*`); Direct Post permission is account-scoped and may take 24-48h on new accounts\n- **YouTube** — Free shared quota = 10,000 units/day = ~6 video uploads per day across CodivUpload's entire user base. For higher volume, set up BYOP (Bring Your Own Project): [codivupload.com/blog/youtube-byop-setup](https://codivupload.com/blog/youtube-byop-setup?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=byop-info)\n- **X (Twitter)** — Free dev tier doesn't include write permissions. Either use CodivUpload's shared OAuth (works on free tier of CodivUpload via shared X app) or set up BYOK with paid X Basic ($100/mo)\n- **YouTube Shorts** — `youtube_type=shorts` triggers Shorts classification; custom thumbnails are NOT supported by YouTube for Shorts (the `youtube_thumbnail_url` field is silently dropped for Shorts)\n- **Tags 500-char rule** — YouTube's tag list has a 500-char total limit including tag separators and quote-marks for multi-word tags. CodivUpload sanitizes automatically; truncates from the end of the array if needed\n- **Carousels** — Instagram allows up to 10 images, all the same aspect ratio. Facebook Pages allow up to 10. \n\nFile v1.0.16:README.md\n\n# CodivUpload Social Manager (via codivupload.com)\n\nAutonomously manage social media posting via the [CodivUpload](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=readme-hero-product) API — schedule, publish, cross-post, and analyze content across YouTube, Instagram, Facebook, X, TikTok, Threads, and Pinterest from one OpenClaw skill.\n\n[![ClawHub](https://img.shields.io/badge/ClawHub-codivupload--social--manager-cyan)](https://clawhub.ai/codivion/codivupload-social-manager)\n[![License](https://img.shields.io/badge/license-MIT-blue)](https://github.com/Codivion/codivupload-skills/blob/main/LICENSE)\n[![Platforms](https://img.shields.io/badge/platforms-7%2B-green)](https://codivupload.com/use-case/ai-skills/openclaw?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=platforms-badge)\n[![MCP](https://img.shields.io/badge/MCP-supported-violet)](https://www.npmjs.com/package/codivupload-mcp)\n[![Get an API key — Starter $20/mo](https://img.shields.io/badge/Get_an_API_key_%E2%80%94_Starter_%2420%2Fmo-codivupload.com-indigo?style=for-the-badge)](https://app.codivupload.com/en/auth/login?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=hero-cta-badge)\n\n> **Start free, upgrade when you want the agent to do it for you.** [Sign up for free](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=hero-free-cta) — no credit card — and try CodivUpload from the **web dashboard**: 10 uploads/month across all 7+ launched platforms (YouTube, Instagram, Facebook, X, TikTok, Threads, Pinterest), drag-and-drop calendar, AI captions. When you're ready for your **OpenClaw agent to schedule + cross-post + run livestreams for you**, upgrade to **Starter** — $20/mo (or $200/yr — 2 months free), API access included. Pro / Business / Enterprise unlock more profiles, team seats, livestreams, and analytics. [See full pricing →](https://codivupload.com/pricing?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=pricing-callout)\n\n> **Quick start (1 line):** sign up at [codivupload.com](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=quick-start-signup), subscribe to Starter, create a profile, connect a social account, generate an API key → `openclaw config set CODIVUPLOAD_API_KEY=<YOUR_API_KEY>` → ready. Full step-by-step in the Setup section below.\n\n### Try this on day 1 (after setup)\nOnce you've completed the 5-minute setup, paste these prompts to your OpenClaw agent — each one runs through the full skill:\n\n- *\"List my CodivUpload profiles and which platforms are connected on each.\"* — sanity-checks your key + profile + connected accounts in one call.\n- *\"Schedule this video to post on TikTok, Instagram, and YouTube tomorrow at 9am — caption: 'Quick productivity tip'.\"* — exercises cross-platform fan-out + scheduling.\n- *\"What's the best time to post for my Instagram audience?\"* — pulls 90-day analytics to recommend a slot.\n- *\"Set up a 24/7 YouTube live stream with this MP4 source URL.\"* — kicks off the BYOP / managed live stream flow with the explicit stop instruction surfaced.\n\n---\n\n## Setup — your first 5 minutes\n\nCodivUpload is a service running at `codivupload.com`; this skill is the OpenClaw client for that service. Before the agent can post anything, you need an **account + a profile + connected social accounts + an API key**, in that order. Steps 1-4 happen in your browser on the dashboard; step 5 is one terminal command.\n\n### 1. Create a CodivUpload account (Free is fine to start, Starter unlocks the skill)\nSign up at **[app.codivupload.com/en/auth/login](https://app.codivupload.com/en/auth/login?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=readme-step-1-signup)** (email + password, or Google OAuth). The **Free plan** activates automatically — **$0, no credit card, 10 uploads/month** across all 7+ launched platforms. Try CodivUpload from the **web dashboard** first if you want — drag-and-drop calendar, AI caption generation, scheduled posts.\n\nWhen you're ready for **your OpenClaw agent to do the work for you** (schedule, cross-post, run livestreams via API), upgrade to **Starter** — **$20/mo** or **$200/yr** (2 months free yearly). API access starts at Starter. Upgrade from Dashboard → Subscription, or directly via **[codivupload.com/pricing](https://codivupload.com/pricing?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=readme-step-1-upgrade-starter)**. ~2 min total.\n\n### 2. Create a profile\nProfiles are CodivUpload's grouping concept: one profile = one brand or client, with many social accounts attached. The skill posts AS a profile (not directly to a social account).\n\nGo to **Dashboard → Profiles → New profile** at **[app.codivupload.com/en/dashboard/profiles](https://app.codivupload.com/en/dashboard/profiles?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=readme-step-2-profile-create)**. Pick a `username` (lowercase, no spaces) — this is the `profile_name` the agent will use. Examples: `acme_brand`, `client_bloomskin`, `personal`. ~1 min.\n\n### 3. Connect social accounts to the profile\nOpen your profile from **[app.codivupload.com/en/dashboard/profiles/all](https://app.codivupload.com/en/dashboard/profiles/all?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=readme-step-3-profile-list)**. On the profile detail screen, click each platform's logo (YouTube, Instagram, Facebook, X, TikTok, Threads, Pinterest) you want the agent to post to. An OAuth popup for that platform authorizes the connection; CodivUpload stores the token AES-256-GCM-encrypted server-side. ~30 sec per platform.\n\n**Per-platform notes:**\n- **Instagram + Facebook:** must be a Business or Creator account linked to a Facebook Page (Meta API limitation — Personal accounts can't post via any third-party tool).\n- **TikTok:** Direct Post permission may take 24-48h on new accounts; Draft mode (`tiktok_post_mode=DRAFT`) works immediately.\n- **YouTube:** the shared OAuth covers ~10K units/day across all CodivUpload users combined. For dedicated quota, set up [BYOP](https://codivupload.com/blog/youtube-byop-setup?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=byop-info-readme) — your own Google Cloud project tied to your account.\n- **X (Twitter):** shared OAuth works on X's free dev tier via CodivUpload's own X app. For high volume, [BYOK](https://codivupload.com/blog/x-byok-setup?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=byok-info-readme) requires X Basic ($100/mo on X's side).\n\n### 4. Generate an API key\nGo to **Dashboard → Settings → API Keys → New key** at **[app.codivupload.com/en/dashboard/api-keys](https://app.codivupload.com/en/dashboard/api-keys?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=readme-step-4-api-key-create)**. Pick the narrowest scope that fits (see [Configuration](#configuration) below — for most users, **per-workspace** is the right default). Give the key a descriptive name (e.g. `openclaw-mac-laptop`) so it's easy to revoke later. The key shows **once** on creation — copy it immediately (format: `cdv_<40 chars>`). ~30 sec.\n\n### 5. Set the key in OpenClaw config\n```bash\nopenclaw config set CODIVUPLOAD_API_KEY=<YOUR_CODIVUPLOAD_API_KEY>\n```\nThe skill reads the key from this config layer only. Never paste the key into the chat window with your AI agent — if it ends up in chat logs, rotate it from Dashboard → API Keys → Revoke + reissue. ~5 sec.\n\n### 6. First prompt\nTry a no-op verification first — ask your agent:\n> \"List my CodivUpload profiles and which platforms are connected on each.\"\n\nThis calls `GET /v1/profiles` once and tells you in one shot whether the key is valid, whether the profile exists, and which platforms are wired up. From there, real posting prompts work — see [Usage examples](#usage-examples) below.\n\n### Optional — install the MCP server\nSpeeds up agent token usage; the skill works without it.\n```bash\nnpm install -g codivupload-mcp@2.0.0   # exact pin\n```\n\n---\n\nA comprehensive social media manager skill for OpenClaw. Turns your local AI assistant into an autonomous social media manager for **YouTube, Instagram, X (Twitter), Facebook, TikTok, Threads, and Pinterest** — **7+ platforms launched** (with Bluesky in active rollout).\n\n## YouTube · Instagram · X · Facebook — first-class support\n\nThis skill puts the **most-used platforms** front and center, with deeper integration than any rival skill:\n\n### YouTube\n- **Schedule + publish** long-form videos, Shorts, livestreams\n- **24/7 managed live streams** with the managed live stream relay (zero CPU on your machine)\n- **BYOP** (Bring Your Own Project) → unlimited daily upload quota via your own Google Cloud project (vs shared 10K-unit limit on rival skills)\n- **Made-For-Kids** (MFK / COPPA) flag handled correctly per upload\n- Premiere scheduling, end screens, cards\n- Bulk upload 60+ Shorts per day per channel with BYOP\n\n### Instagram\n- **Reels + Stories + Carousels + Feed posts** — full coverage\n- Auto-schedule without the push-notification-on-phone dance\n- Business + Creator account support (no Personal-account limitation)\n- Per-post platform overrides (caption, hashtags, first-comment)\n- Cross-post tag, location, music sync\n- Up to 10-image carousels with mixed photo + video\n\n### X (Twitter)\n- **Long-form posts** (25K chars on X Premium / Premium+)\n- **Threads** with native reply chains, polls, scheduled\n- **BYOK** (Bring Your Own Keys) → unlimited free-tier posts via your own X Developer App (rival skills cap you on shared keys)\n- Quote posts, reposts, image/video attachments\n- X Premium feature awareness — agent suggests Premium tier when needed\n\n### Facebook\n- **Page posts** (Personal not supported by Meta API anywhere — this is API-level, not skill-level)\n- Reels, video, image, link previews\n- Multi-page support for agencies (manage 100+ Pages)\n- Scheduled posts via Meta Graph API (proper, not browser automation)\n- Group posting via authenticated Page admin\n\nPlus **TikTok, Threads, and Pinterest** all launched with the same depth. **Bluesky** is in active rollout — skill auto-detects new platforms via the API.\n\n## Why this skill (vs alternatives)\n\n| Capability | CodivUpload Skill | Post Bridge Skill | Other social skills |\n|---|---|---|---|\n| **Platform count (launched)** | **7+** | 5 | 3-7 |\n| **MCP server** | ✅ `codivupload-mcp` | ❌ | ❌ |\n| **24/7 live streaming** | ✅ Managed live stream relay | ❌ | ❌ |\n| **BYOP** (dedicated YouTube quota) | ✅ | ❌ | ❌ |\n| **BYOK** (dedicated X rate limit) | ✅ | ❌ | ❌ |\n| **Agency multi-tenant** | ✅ Workspace cascade + RBAC | ❌ | ❌ |\n| **Whitelabel branded OAuth** | ✅ Pro+ | ❌ | ❌ |\n| **TypeScript SDK** | ✅ npm: `codivupload` | ❌ | partial |\n| **Python SDK** | ✅ PyPI: `codivupload` | ❌ | partial |\n| **Free plan (dashboard only, no API)** | ✅ 10 uploads/mo, all launched platforms, no credit card | varies | varies |\n| **API access starts at** | Starter ($20/mo · $200/yr 2 months free) | varies | varies |\n| **MIT-licensed skill artifact** | ✅ Fork-friendly | ✅ | ✅ |\n| **Active development** | Weekly releases | varies | varies |\n\n**Bottom line:** CodivUpload Skill is the only OpenClaw skill that turns your local AI agent into a **full-stack social media operations system** — not just a basic scheduler. Live streams, agency workspaces, BYOP/BYOK, MCP-native — all in one skill.\n\n## What this skill does\n\nWhen installed, your OpenClaw agent (running locally on Mac / Linux / Windows) gains the ability to:\n\n- **Schedule posts** to any of the 7+ launched social platforms (with Bluesky in active rollout) — platform-specific overrides per platform\n- **Help draft and queue** YouTube Shorts, TikToks, and Reels via the REST API (the skill defaults to scheduled / draft modes; bulk operations require explicit user confirmation up front)\n- **Set up 24/7 YouTube live streams** with managed live stream relay (always confirmation-gated; the skill includes the `DELETE /v1/livestreams/{id}` stop instruction whenever it starts a stream)\n- **Pull cross-platform analytics** for engagement, growth, best-time-to-post (read-only)\n- **Manage agency client profiles** with whitelabel branding\n- **Use BYOP** (Bring Your Own Project) for dedicated YouTube quota\n- **Use BYOK** (Bring Your Own Keys) for dedicated X rate limits\n\nThe skill prefers calling [CodivUpload's MCP server](https://www.npmjs.com/package/codivupload-mcp) when configured, falling back to direct REST API calls otherwise.\n\n### Safety defaults baked into the skill\nSKILL.md ships with a **Safety & confirmation defaults** section (read by the LLM at activation) that requires explicit user confirmation before any immediate publish, bulk operation (≥3 posts), live stream start, profile/account change, or spending-impacting action. The skill prefers scheduled/draft modes over immediate publish, prefers single-platform smoke tests before fan-out, and never logs or echoes the API key. See `SKILL.md` → \"Safety & confirmation defaults\" for the full list.\n\n## Installation\n\n```bash\n# Drop SKILL.md into your OpenClaw skills workspace\nmkdir -p ~/.openclaw/workspace/skills/codivupload\ncp SKILL.md ~/.openclaw/workspace/skills/codivupload/SKILL.md\n\n# Optional: install the MCP server (gives the agent direct tool access).\n# IMPORTANT: use an EXACT version pin — no caret, no tilde, no `latest`.\n# A credentialed runtime (the MCP server inherits CODIVUPLOAD_API_KEY)\n# should never resolve a floating range.\nnpm install -g codivupload-mcp@2.0.0\n\n# Verify before relying on it:\nnpm view codivupload-mcp publisher        # → codivion <accounts@codivion.com>\nnpm view codivupload-mcp@2.0.0 dist.integrity\n# expected: sha512-pK0r8XkR2M/brfn1Nsy6Uh7nGDx5qpx9h3pLgZljYkU3pv0BXKb7uJapBOFL11mBIQhWAl0hASxxCSLE11SDfA==\n```\n\nThe skill works **without** the MCP server (it falls back to direct REST API + the official TypeScript / Python SDKs) — install only if you want fewer agent tokens spent on tool descriptions. Skip it to keep the supply-chain surface to zero. **Avoid `npx -y codivupload-mcp` without a pinned exact version** — `-y` auto-accepts whatever the registry resolves, which is a bad fit for a credentialed runtime.\n\n## Configuration\n\nSet your CodivUpload API key in OpenClaw config (this is the only place the skill reads it from — the skill never asks for the key in chat and never echoes it back):\n\n```bash\nopenclaw config set CODIVUPLOAD_API_KEY=<YOUR_CODIVUPLOAD_API_KEY>\n```\n\n### Issue the **narrowest** key the skill needs (this is the most important security setting)\n\nThe CodivUpload API enforces per-key scope **server-side** — pick the narrowest tier that fits your use case:\n\n| Tier | Authority | When to use | How to create |\n|---|---|---|---|\n| **Single-platform** | Publish to ONE platform on ONE profile. No analytics, no profile mgmt, no billing. | Skill will only post to (e.g.) Instagram for one brand. | Dashboard → API Keys → New → \n\nArchive v1.0.15: 3 files, 26183 bytes\n\nFiles: README.md (20593b), SKILL.md (52347b), _meta.json (146b)\n\nArchive v1.0.14: 3 files, 26099 bytes\n\nFiles: README.md (20312b), SKILL.md (51993b), _meta.json (146b)\n\nArchive v1.0.13: 3 files, 25857 bytes\n\nFiles: README.md (19774b), SKILL.md (51595b), _meta.json (146b)\n\nArchive v1.0.12: 3 files, 25409 bytes\n\nFiles: README.md (18823b), SKILL.md (50819b), _meta.json (146b)\n\nArchive v1.0.11: 3 files, 24677 bytes\n\nFiles: README.md (16569b), SKILL.md (49791b), _meta.json (146b)\n\nArchive v1.0.10: 3 files, 24901 bytes\n\nFiles: README.md (16569b), SKILL.md (50661b), _meta.json (146b)\n\nArchive v1.0.9: 3 files, 24916 bytes\n\nFiles: README.md (16560b), SKILL.md (50655b), _meta.json (145b)\n\nArchive v1.0.8: 3 files, 21588 bytes\n\nFiles: README.md (12933b), SKILL.md (45091b), _meta.json (145b)","readmeExcerpt":"Skill: CodivUpload Social Manager Owner: codivion Summary: Social media scheduler, cross-poster, and content calendar for OpenClaw. Schedule social media posts, publish content, cross-post to multiple platforms, auto... Tags: latest:1.0.17 Version history: v1.0.17 | 2026-05-28T00:42:01.044Z | user Social media manager skill for OpenClaw — schedule, cross-post, and manage content across 7+ launched platforms (YouTube,","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"openclaw config set CODIVUPLOAD_API_KEY=<YOUR_CODIVUPLOAD_API_KEY>"},{"language":"bash","snippet":"npm install -g codivupload-mcp@2.0.0   # exact pin, not a range"},{"language":"bash","snippet":"openclaw config set CODIVUPLOAD_API_KEY=<YOUR_CODIVUPLOAD_API_KEY>"},{"language":"json","snippet":"{\n  \"message\": \"Post successfully queued\",\n  \"post_id\": \"uuid\",\n  \"destinations_count\": 3,\n  \"received_type\": \"video\",\n  \"is_immediate\": true\n}"},{"language":"bash","snippet":"curl -X POST https://api.codivupload.com/v1/upload-media \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{"},{"language":"bash","snippet":"curl -X POST https://api.codivupload.com/v1/upload-media \\\n  -H \"Authorization: Bearer $CODIVUPLOAD_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://your-source.example.com/raw-clip.mp4\",\n    \"profile_name\": \"my_brand\",\n    \"type\": \"video\"\n  }'"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: codivupload-social-manager\ndescription: |\n  Social media scheduler, cross-poster, and content calendar for OpenClaw.\n  Schedule social media posts, publish content, cross-post to multiple\n  platforms, automate social media posting, and manage a content calendar\n  across YouTube, Instagram, Facebook, X (Twitter), TikTok, Threads, and\n  Pinterest from one OpenClaw skill — turn your local AI agent into an\n  autonomous social media manager covering 7+ launched social platforms\n  with Bluesky in active rollout.\n\n  Post to YouTube, post to Instagram, post to Facebook, post to X\n  (Twitter), post to TikTok, post to Threads, post to Pinterest — single-\n  prompt posting and multi-platform cross-posting from one OpenClaw skill.\n  YouTube post automation and YouTube Shorts uploader with bulk publish\n  and BYOP for unlimited YouTube API quota; Instagram post scheduler,\n  Instagram Reels publisher, and Instagram carousel poster with AI\n  captions; Facebook post scheduler and Facebook Page publisher with\n  multi-page agency support; X post scheduler, tweet scheduler, X\n  (Twitter) thread poster, schedule tweets, post a tweet, tweet thread\n  automation — with long-form 25K-character support on X Premium /\n  Premium+ accounts, polls, image and video tweets, quote tweets, and\n  BYOK for dedicated rate limits via your own X Developer App; TikTok\n  post automation with Direct Post and Draft modes; Threads post\n  scheduler; Pinterest pin scheduler;\n  cross-platform publisher and multi-platform poster across all of the\n  above. Content calendar, queue, scheduled posting, draft management,\n  AI caption generation, best-time-to-post analytics, agency multi-\n  workspace + RBAC with whitelabel branded OAuth for client portfolios,\n  presigned upload flow for media up to 5GB, 50+ platform-specific\n  override parameters, webhook notifications, 24/7 managed YouTube live\n  streaming.\n\n  Buffer alternative, Hootsuite alternative, Later alternative, Sprout\n  Social alternative, Post Bridge alternative, Upload-Post alternative,\n  Mixpost alternative, Postiz alternative, Ayrshare alternative — built\n  API-first and agent-native for OpenClaw, Claude, ChatGPT, Cursor, and\n  Zed. Optional MCP server (codivupload-mcp, exact pin 2.0.0) for direct\n  tool access; works fully without it via REST API + official TypeScript\n  and Python SDKs (npm: codivupload, PyPI: codivupload).\n\n  Use when the user asks to post a video, post an image, post a Reel,\n  post a Short, post a tweet, post a thread, schedule a tweet, schedule\n  a thread, schedule social media, cross-post to multiple platforms,\n  automate social posting, run a 24/7 livestream, bulk-upload YouTube\n  Shorts, schedule Instagram Reels, post a TikTok, publish to Facebook\n  Page, post on X (Twitter), set up a multi-tenant agency social media\n  stack, manage a content calendar, or wants an AI-agent-native\n  alternative to Buffer / Hootsuite / Later / Sprout Social / Post-Bridge\n  / Upload-Post / Mixpost / Postiz / Ayrshare. Tri"},{"path":"README.md","content":"# CodivUpload Social Manager (via codivupload.com)\n\nAutonomously manage social media posting via the [CodivUpload](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=readme-hero-product) API — schedule, publish, cross-post, and analyze content across YouTube, Instagram, Facebook, X, TikTok, Threads, and Pinterest from one OpenClaw skill.\n\n[![ClawHub](https://img.shields.io/badge/ClawHub-codivupload--social--manager-cyan)](https://clawhub.ai/codivion/codivupload-social-manager)\n[![License](https://img.shields.io/badge/license-MIT-blue)](https://github.com/Codivion/codivupload-skills/blob/main/LICENSE)\n[![Platforms](https://img.shields.io/badge/platforms-7%2B-green)](https://codivupload.com/use-case/ai-skills/openclaw?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=platforms-badge)\n[![MCP](https://img.shields.io/badge/MCP-supported-violet)](https://www.npmjs.com/package/codivupload-mcp)\n[![Get an API key — Starter $20/mo](https://img.shields.io/badge/Get_an_API_key_%E2%80%94_Starter_%2420%2Fmo-codivupload.com-indigo?style=for-the-badge)](https://app.codivupload.com/en/auth/login?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=hero-cta-badge)\n\n> **Start free, upgrade when you want the agent to do it for you.** [Sign up for free](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=hero-free-cta) — no credit card — and try CodivUpload from the **web dashboard**: 10 uploads/month across all 7+ launched platforms (YouTube, Instagram, Facebook, X, TikTok, Threads, Pinterest), drag-and-drop calendar, AI captions. When you're ready for your **OpenClaw agent to schedule + cross-post + run livestreams for you**, upgrade to **Starter** — $20/mo (or $200/yr — 2 months free), API access included. Pro / Business / Enterprise unlock more profiles, team seats, livestreams, and analytics. [See full pricing →](https://codivupload.com/pricing?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=pricing-callout)\n\n> **Prefer to test the API with your agent first? Start a 7-day free trial.** $0.00 due today, card collected for auto-renewal after the trial. Cancel anytime during the 7 days — no charge. One trial per customer lifetime. Available on every paid plan, monthly or yearly. Pick this if you want full API + MCP access for your OpenClaw agent before committing to a subscription. [Start trial →](https://app.codivupload.com/en/dashboard/subscription?trial=1&utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=hero-trial-cta)\n\n> **Quick start — two paths to get an API key:**\n>\n> **A) Trial path (recommended for \"try first, decide later\"):** sign up at [codivupload.com](https://codivupload.com?utm_source=clawhub&utm_medium=skill&utm_campaign=openclaw-onboarding&utm_content=quick-start-trial-signup) → open Dashboard → Subscription → toggle **Fr"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7811spp2j1k47gydavavrfv98667fs\",\n  \"slug\": \"codivupload-social-manager\",\n  \"version\": \"1.0.17\",\n  \"publishedAt\": 1779928921044\n}"},{"path":"skill-card.md","content":"## Description:\n\nSocial media scheduler, cross-poster, and content calendar for OpenClaw across YouTube, Instagram, Facebook, X, TikTok, Threads, and Pinterest.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[codivion](https://clawhub.ai/user/codivion)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users, creators, agencies, and developers use this skill to help an OpenClaw agent schedule, publish, cross-post, and analyze social media content through the CodivUpload API. It is useful for managing content calendars, platform-specific post formats, bulk uploads, and livestream workflows from agent-generated guidance, commands, or API calls.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can affect real public social media accounts through the configured CodivUpload API key.\n\nMitigation: Use a single-platform or per-workspace API key where possible, avoid global account keys unless needed, and review every publish, bulk, livestream, delete, and billing approval prompt before execution.\n\nRisk: Unpinned MCP or package execution in a credentialed environment could expose CODIVUPLOAD_API_KEY to unexpected code.\n\nMitigation: Use the exact pinned codivupload-mcp version and avoid unpinned npx or package install commands in the same environment as the API key.\n\nRisk: Scheduled posts and livestreams may continue after the original agent session ends.\n\nMitigation: Prefer draft or scheduled workflows for review, track created post or stream identifiers, and explicitly cancel scheduled posts or stop livestreams when no longer intended.\n\n## Reference(s):\n\n- [CodivUpload Skill on ClawHub](https://clawhub.ai/codivion/skills/codivupload-social-manager)\n- [CodivUpload Website](https://codivupload.com)\n- [CodivUpload API Documentation](https://docs.codivupload.com)\n- [CodivUpload OpenAPI Specification](https://api.codivupload.com/public-openapi.json)\n- [CodivUpload MCP Server](https://www.npmjs.com/package/codivupload-mcp)\n- [CodivUpload TypeScript SDK](https://www.npmjs.com/package/codivupload)\n- [CodivUpload Python SDK](https://pypi.org/project/codivupload/)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline shell commands, API examples, and structured guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May propose CodivUpload REST API calls, SDK snippets, MCP usage, and OpenClaw configuration steps for user review.]\n\n## Skill Version(s):\n\n1.0.17 (source: server-resolved release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":2003,"uniquenessScore":44,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T19:49:55.404Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T19:49:55.404Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T23:45:23.331Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}