{"id":"94da34c1-1dce-4ffc-a2b1-1a16039d763c","entityType":"agent","slug":"clawhub-clawbus-tiktok-publish","name":"TikTok Publisher","canonicalUrl":"https://www.xpersona.co/agent/clawhub-clawbus-tiktok-publish","canonicalPath":"/agent/clawhub-clawbus-tiktok-publish","generatedAt":"2026-10-10T13:32:28.704Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T10:37:16.999Z","emptyReason":null},"description":"Post to TikTok, upload TikTok videos, and publish TikTok video content through the MyBrandMetrics API. Use for TikTok posting, uploading TikTok videos, publi...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.5K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s1714nww0520qjy3akv321qsjs86bfp7:tiktok-publish","sourceUrl":"https://clawhub.ai/clawbus/tiktok-publish","homepage":"https://clawhub.ai/clawbus/skills/tiktok-publish","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/clawbus/tiktok-publish","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/clawbus/skills/tiktok-publish","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":63,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"TikTok Publisher 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-10T10:37:16.999Z","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-10T10:37:16.999Z","emptyReason":null},"stars":null,"forks":null,"downloads":1491,"packageName":null,"latestVersion":"1.1.18","tractionLabel":"1.5K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T10:37:16.999Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T10:37:16.999Z","lastCrawledAt":"2026-10-10T10:37:16.999Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T10:37:16.999Z","lastVerifiedAt":null,"highlights":[{"version":"1.1.18","createdAt":"2026-05-26T10:45:07.664Z","changelog":"Add comparison framing to explain why MyBrandMetrics TikTok publishing is simpler than a typical TikTok developer setup.","fileCount":7,"zipByteSize":8036},{"version":"1.1.17","createdAt":"2026-05-18T15:27:47.732Z","changelog":"Remove authentication section","fileCount":6,"zipByteSize":6481},{"version":"1.1.16","createdAt":"2026-05-18T15:23:54.920Z","changelog":"Simplify TikTok workflow and authentication guidance","fileCount":6,"zipByteSize":6597},{"version":"1.1.15","createdAt":"2026-05-18T15:09:58.943Z","changelog":"Remove requirements section","fileCount":6,"zipByteSize":6796},{"version":"1.1.14","createdAt":"2026-05-18T15:06:21.964Z","changelog":"Revert repeated MyBrandMetrics URL additions","fileCount":6,"zipByteSize":6871},{"version":"1.1.13","createdAt":"2026-05-18T15:00:20.867Z","changelog":"Add MyBrandMetrics URL throughout TikTok docs","fileCount":6,"zipByteSize":6906},{"version":"1.1.12","createdAt":"2026-05-18T14:54:42.740Z","changelog":"Remove extra API key and workflow caveat text","fileCount":6,"zipByteSize":6871},{"version":"1.1.11","createdAt":"2026-05-18T14:47:22.531Z","changelog":"Clarify TikTok setup flow and config path","fileCount":6,"zipByteSize":6976}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1714nww0520qjy3akv321qsjs86bfp7:tiktok-publish","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s1714nww0520qjy3akv321qsjs86bfp7:tiktok-publish` 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/clawbus/tiktok-publish 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-clawbus-tiktok-publish/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-tiktok-publish/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-tiktok-publish/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-tiktok-publish/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-tiktok-publish/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-tiktok-publish/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-10T13:32:28.702Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-tiktok-publish/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-tiktok-publish/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-tiktok-publish/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-clawbus-tiktok-publish/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-10T10:37:16.999Z","emptyReason":null},"readme":"Skill: TikTok Publisher\n\nOwner: clawbus\n\nSummary: Post to TikTok, upload TikTok videos, and publish TikTok video content through the MyBrandMetrics API. Use for TikTok posting, uploading TikTok videos, publi...\n\nTags: creator:1.1.18, latest:1.1.18, mybrandmetrics:1.1.18, no-mcp:1.1.18, publishing:1.1.18, social-media:1.1.18, tiktok:1.1.18, video:1.1.18\n\nVersion history:\n\nv1.1.18 | 2026-05-26T10:45:07.664Z | user\n\nAdd comparison framing to explain why MyBrandMetrics TikTok publishing is simpler than a typical TikTok developer setup.\n\nv1.1.17 | 2026-05-18T15:27:47.732Z | user\n\nRemove authentication section\n\nv1.1.16 | 2026-05-18T15:23:54.920Z | user\n\nSimplify TikTok workflow and authentication guidance\n\nv1.1.15 | 2026-05-18T15:09:58.943Z | user\n\nRemove requirements section\n\nv1.1.14 | 2026-05-18T15:06:21.964Z | user\n\nRevert repeated MyBrandMetrics URL additions\n\nv1.1.13 | 2026-05-18T15:00:20.867Z | user\n\nAdd MyBrandMetrics URL throughout TikTok docs\n\nv1.1.12 | 2026-05-18T14:54:42.740Z | user\n\nRemove extra API key and workflow caveat text\n\nv1.1.11 | 2026-05-18T14:47:22.531Z | user\n\nClarify TikTok setup flow and config path\n\nv1.1.10 | 2026-05-18T14:02:23.680Z | user\n\nMake workflow guidance more user-facing\n\nv1.1.9 | 2026-05-18T13:33:42.609Z | user\n\nExpand TikTok publishing workflow guidance\n\nv1.1.8 | 2026-05-18T02:19:26.503Z | user\n\nRename display title to TikTok Publisher\n\nv1.1.7 | 2026-05-18T01:36:38.637Z | user\n\nImprove TikTok search relevance and tags\n\nv1.1.6 | 2026-05-18T01:21:31.833Z | user\n\nRemove ClawBus prefix from skill title\n\nv1.1.5 | 2026-05-15T12:50:22.583Z | user\n\nTighten scheduled posting permissions guidance\n\nv1.1.4 | 2026-05-15T12:05:20.771Z | user\n\nRefine TikTok setup and usage copy after review\n\nv1.1.3 | 2026-05-15T11:35:11.096Z | user\n\nRemove explicit chat install URL from setup flow\n\nv1.1.2 | 2026-05-15T11:30:35.406Z | user\n\nAlign usage instructions with ClawBus TikTok posting tutorial\n\nv1.1.1 | 2026-05-15T11:00:52.901Z | user\n\nAdd setup flow and ClawBus/MyBrandMetrics links\n\nv1.1.0 | 2026-05-15T10:54:45.385Z | user\n\nImprove TikTok publish page copy, configuration support, and examples\n\nv1.0.0 | 2026-05-08T07:17:26.840Z | user\n\nInitial release from clawbus.com\n\nArchive index:\n\nArchive v1.1.18: 7 files, 8036 bytes\n\nFiles: references/configuration.md (820b), references/publishing-examples.md (771b), scripts/check_status.py (1661b), scripts/publish_tiktok.py (3358b), skill-card.md (2232b), SKILL.md (8210b), _meta.json (134b)\n\nFile v1.1.18:SKILL.md\n\n---\nname: TikTok Publisher\ndescription: >\n  Post to TikTok, upload TikTok videos, and publish TikTok video content\n  through the MyBrandMetrics API. Use for TikTok posting, uploading TikTok\n  videos, publishing TikTok videos, scheduling TikTok posts, or checking TikTok\n  publishing status. Supports local video files, remote video\n  URLs, post titles, privacy levels, publish status checks, chat-based posting,\n  and one-time scheduled posting tasks from a Google Sheet.\n---\n\n# TikTok Publisher\n\nPost to TikTok, upload TikTok videos, and publish TikTok video content through\nthe MyBrandMetrics API from a local file or a remote video URL.\n\nUse this skill to post to TikTok, upload TikTok videos, publish TikTok videos,\nschedule TikTok posts, check TikTok publishing status, or create a one-time\nscheduled TikTok posting task.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Why This Is Better\n\nThis flow is simpler than a typical TikTok API or developer-app setup:\n\n- Sign in to MyBrandMetrics with Google instead of creating a TikTok developer\n  app.\n- No TikTok client ID, client secret, redirect URI, or callback server to\n  manage.\n- No manual token storage or refresh flow to build yourself.\n- No separate publish backend to run just to queue uploads and check status.\n- MyBrandMetrics handles the connection layer, while this skill focuses on\n  publishing, polling, and status checks.\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Remote URL publishing | Submit a direct `https://` video URL to TikTok through MyBrandMetrics. |\n| Local file publishing | Upload a local video file with multipart form data. |\n| Post metadata | Set the TikTok post title and privacy level. |\n| Chat-based posting | Use natural-language prompts in chat after the skill is installed. |\n| One-time scheduled tasks | Create a scheduled publishing task from a Google Sheet containing title, date, time, and video URL rows. |\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics, open **Data sources**.\n3. Choose `connect tiktok feed`.\n4. Complete the TikTok authorization flow if prompted.\n5. Get the MyBrandMetrics API key.\n6. Add the API key to `/root/.openclaw/workspace/config.json`:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n7. Install the `tiktok-publish` skill.\n8. Start publishing or checking TikTok publish status with this skill.\n\n## Positioning Notes\n\n- Use this skill when the user wants TikTok publishing without building their\n  own TikTok developer integration.\n- Keep the message simple: one Google-based sign-in to MyBrandMetrics, one\n  connected TikTok feed, and the publish workflow is ready.\n- This is a publishing workflow, not a generic MCP or developer console setup.\n\n## Workflow\n\nUse this workflow to post to TikTok, upload a TikTok video, publish a TikTok\nvideo, schedule TikTok posts, or check a TikTok publishing job.\n\n1. **Confirm the publishing goal.**\n   Choose whether to publish from a remote video URL, upload a local video\n   file, check an existing publish job, or prepare a scheduled posting\n   workflow.\n\n2. **Confirm the TikTok setup.**\n   Sign in to MyBrandMetrics with Google, connect TikTok as a data source, and\n   get a MyBrandMetrics API key.\n\n3. **Prepare credentials.**\n   Add the MyBrandMetrics API key to the workspace config:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n4. **Collect post details.**\n   Prepare the TikTok video source, post title, privacy level, and publishing\n   preference.\n\n   Useful defaults:\n\n   - choose `SELF_ONLY` for test posts;\n   - choose `PUBLIC` when the post is ready to go live;\n   - use a concise title or caption;\n   - use a remote video URL or local video file that is ready to publish.\n\n5. **Publish the TikTok video.**\n   Use the skill to publish from a remote URL or local file. The workflow can\n   also wait for the publishing job to finish when needed.\n\n6. **Check publish status.**\n   If a publish identifier is returned, use it to check the TikTok publish\n   status later. After the job succeeds, confirm the result in the connected\n   TikTok account.\n\n### Drafts, Carousels, And Scheduling\n\nThe current script supports video publishing from a remote URL or local file.\n\nKnown workflow notes:\n\n- Draft-style flows may appear as a TikTok notification that the video is ready\n  to edit, rather than as a normal profile draft.\n- Image carousel publishing may require phone-friendly image dimensions such as\n  1080x1920. Oversized generated images can fail TikTok image checks.\n- Scheduled posting should be treated as an automation workflow: confirm the\n  sheet columns, publish date, publish time, video URL, title, privacy level,\n  and account before creating the task.\n\n### Common Errors\n\n| Error | Likely cause | Fix |\n| --- | --- | --- |\n| `401 invalid token format` | API key was sent in the wrong auth format or the key is invalid. | Use the MyBrandMetrics API key configuration supported by this skill. Do not use a bearer-token format. |\n| `picture_size_check_failed` | Image dimensions do not meet TikTok requirements. | Resize images to a phone-friendly format such as 1080x1920 and retry. |\n| `duration_check` | Video is too short. | Use a video that is at least 3 seconds long. |\n| `invalid_params` | Title, caption, media, or request parameters are invalid. | Simplify the title, reduce hashtags, and recheck the source URL or local path. |\n\nThe chat request should include:\n\n- the video URL or file reference;\n- the caption or title;\n- whether the post should be a test or public post;\n- whether to wait for publish completion.\n\nAfter the posting flow finishes, check the response and confirm the TikTok\nupload succeeded.\n\n## Use The Scripts Directly\n\nUse `scripts/publish_tiktok.py`.\n\nRemote URL:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\nLocal file:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Launch clip\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\nWith explicit polling controls:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Campaign preview\" \\\n  --privacy-level \"SELF_ONLY\" \\\n  --wait-for-published \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check Publish Status\n\nUse `scripts/check_status.py` when you already have a `publish_id`.\n\n```bash\npython3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n```\n\n## One-Time Scheduled Posting\n\nClawBus can also create a one-time scheduled TikTok posting task.\n\nPrepare:\n\n- videos or images uploaded to Google Drive or another reachable location;\n- a Google Sheet with post title, publish date, publish time, and video URL;\n- sharing access granted only to the trusted account or service that needs to\n  read the table.\n\nExample request:\n\n```text\nPlease help me create a one-time scheduled task. The task involves publishing videos or images to a TikTok account using the tiktok-publish skill, based on the title, date, time, and video URL data found in this table: GOOGLE_SHEET_URL\n```\n\nBefore scheduling, review every row in the sheet and confirm the account,\npublish time, title, and video URL. When the publishing task reports success,\nopen TikTok and confirm the post is live.\n\n## Parameters\n\n| Parameter | Required | Purpose |\n| --- | --- | --- |\n| `--source` | Yes | Direct video URL or local video file path. |\n| `--title` | Yes | TikTok post title. |\n| `--privacy-level` | No | `SELF_ONLY` by default; use `PUBLIC` only when ready to post live. |\n| `--wait-for-published` | No | Poll until the publish job completes. |\n| `--poll-interval` | No | Polling interval in milliseconds. |\n| `--poll-timeout` | No | Polling timeout in milliseconds. |\n| `--config` | No | Path to workspace `config.json`. |\n\nBefore publishing, confirm the TikTok account, video source, title or caption,\nand privacy setting. For test posts, use `SELF_ONLY` first.\n\nFile v1.1.18:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"tiktok-publish\",\n  \"version\": \"1.1.18\",\n  \"publishedAt\": 1779792307664\n}\n\nFile v1.1.18:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing scripts cannot find TikTok credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe scripts support these configuration sources:\n\n1. Environment variables:\n   - `TIKTOK_API_KEY`\n   - `TIKTOK_AUTHORIZATION_TOKEN`\n   - optional `TIKTOK_PUBLISHER_CONFIG`\n2. A workspace `config.json` file with a `tiktok` object\n\nEnvironment variables take precedence over values from `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens into the repository.\n- Prefer environment variables in shared environments.\n- Do not print secrets in terminal output or logs.\n\nFile v1.1.18:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish from a remote URL\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\n## Publish from a local file\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Hello from local file\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\n## Publish with explicit polling options\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Scheduled check\" \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check status\n\n```bash\npython3 scripts/check_status.py \\\n  --publish-id \"abc123\"\n```\n\nFile v1.1.18:skill-card.md\n\n## Description:\n\nPost to TikTok, upload TikTok videos, and publish TikTok video content through the MyBrandMetrics API.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[clawbus](https://clawhub.ai/user/clawbus)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to publish TikTok videos from local files or remote URLs through MyBrandMetrics, check publish status, and prepare one-time scheduled posting workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can publish content publicly to TikTok through a connected account.\n\nMitigation: Confirm the TikTok account, source media, title, and privacy setting before publishing; use SELF_ONLY for test posts.\n\nRisk: The skill sends an API key and may upload local files or submit remote URLs to MyBrandMetrics.\n\nMitigation: Use environment variables in shared environments, avoid committing real tokens, and verify the exact local file path or URL before publishing.\n\nRisk: The documented Google Sheet scheduling workflow is not implemented by the included scripts.\n\nMitigation: Do not rely on scheduled posting unless the publisher supplies and explains the missing implementation.\n\n## Reference(s):\n\n- [Configuration](references/configuration.md)\n- [Publishing Examples](references/publishing-examples.md)\n- [ClawHub Skill Page](https://clawhub.ai/clawbus/skills/tiktok-publish)\n- [ClawBus](https://www.clawbus.com/)\n- [MyBrandMetrics](https://mybrandmetrics.com/)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, Configuration, API Calls, JSON]\n\n**Output Format:** [Markdown guidance with inline bash commands and JSON responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses a MyBrandMetrics API key and may upload local video files or submit remote video URLs for TikTok publishing.]\n\n## Skill Version(s):\n\n1.1.18 (source: server 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.1.17: 6 files, 6481 bytes\n\nFiles: references/configuration.md (820b), references/publishing-examples.md (771b), scripts/check_status.py (1661b), scripts/publish_tiktok.py (3358b), SKILL.md (7338b), _meta.json (134b)\n\nFile v1.1.17:SKILL.md\n\n---\nname: TikTok Publisher\ndescription: >\n  Post to TikTok, upload TikTok videos, and publish TikTok video content\n  through the MyBrandMetrics API. Use for TikTok posting, uploading TikTok\n  videos, publishing TikTok videos, scheduling TikTok posts, or checking TikTok\n  publishing status. Supports local video files, remote video\n  URLs, post titles, privacy levels, publish status checks, chat-based posting,\n  and one-time scheduled posting tasks from a Google Sheet.\n---\n\n# TikTok Publisher\n\nPost to TikTok, upload TikTok videos, and publish TikTok video content through\nthe MyBrandMetrics API from a local file or a remote video URL.\n\nUse this skill to post to TikTok, upload TikTok videos, publish TikTok videos,\nschedule TikTok posts, check TikTok publishing status, or create a one-time\nscheduled TikTok posting task.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Remote URL publishing | Submit a direct `https://` video URL to TikTok through MyBrandMetrics. |\n| Local file publishing | Upload a local video file with multipart form data. |\n| Post metadata | Set the TikTok post title and privacy level. |\n| Chat-based posting | Use natural-language prompts in chat after the skill is installed. |\n| One-time scheduled tasks | Create a scheduled publishing task from a Google Sheet containing title, date, time, and video URL rows. |\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics, open **Data sources**.\n3. Choose `connect tiktok feed`.\n4. Complete the TikTok authorization flow if prompted.\n5. Get the MyBrandMetrics API key.\n6. Add the API key to `/root/.openclaw/workspace/config.json`:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n7. Install the `tiktok-publish` skill.\n8. Start publishing or checking TikTok publish status with this skill.\n\n## Workflow\n\nUse this workflow to post to TikTok, upload a TikTok video, publish a TikTok\nvideo, schedule TikTok posts, or check a TikTok publishing job.\n\n1. **Confirm the publishing goal.**\n   Choose whether to publish from a remote video URL, upload a local video\n   file, check an existing publish job, or prepare a scheduled posting\n   workflow.\n\n2. **Confirm the TikTok setup.**\n   Sign in to MyBrandMetrics with Google, connect TikTok as a data source, and\n   get a MyBrandMetrics API key.\n\n3. **Prepare credentials.**\n   Add the MyBrandMetrics API key to the workspace config:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n4. **Collect post details.**\n   Prepare the TikTok video source, post title, privacy level, and publishing\n   preference.\n\n   Useful defaults:\n\n   - choose `SELF_ONLY` for test posts;\n   - choose `PUBLIC` when the post is ready to go live;\n   - use a concise title or caption;\n   - use a remote video URL or local video file that is ready to publish.\n\n5. **Publish the TikTok video.**\n   Use the skill to publish from a remote URL or local file. The workflow can\n   also wait for the publishing job to finish when needed.\n\n6. **Check publish status.**\n   If a publish identifier is returned, use it to check the TikTok publish\n   status later. After the job succeeds, confirm the result in the connected\n   TikTok account.\n\n### Drafts, Carousels, And Scheduling\n\nThe current script supports video publishing from a remote URL or local file.\n\nKnown workflow notes:\n\n- Draft-style flows may appear as a TikTok notification that the video is ready\n  to edit, rather than as a normal profile draft.\n- Image carousel publishing may require phone-friendly image dimensions such as\n  1080x1920. Oversized generated images can fail TikTok image checks.\n- Scheduled posting should be treated as an automation workflow: confirm the\n  sheet columns, publish date, publish time, video URL, title, privacy level,\n  and account before creating the task.\n\n### Common Errors\n\n| Error | Likely cause | Fix |\n| --- | --- | --- |\n| `401 invalid token format` | API key was sent in the wrong auth format or the key is invalid. | Use the MyBrandMetrics API key configuration supported by this skill. Do not use a bearer-token format. |\n| `picture_size_check_failed` | Image dimensions do not meet TikTok requirements. | Resize images to a phone-friendly format such as 1080x1920 and retry. |\n| `duration_check` | Video is too short. | Use a video that is at least 3 seconds long. |\n| `invalid_params` | Title, caption, media, or request parameters are invalid. | Simplify the title, reduce hashtags, and recheck the source URL or local path. |\n\nThe chat request should include:\n\n- the video URL or file reference;\n- the caption or title;\n- whether the post should be a test or public post;\n- whether to wait for publish completion.\n\nAfter the posting flow finishes, check the response and confirm the TikTok\nupload succeeded.\n\n## Use The Scripts Directly\n\nUse `scripts/publish_tiktok.py`.\n\nRemote URL:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\nLocal file:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Launch clip\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\nWith explicit polling controls:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Campaign preview\" \\\n  --privacy-level \"SELF_ONLY\" \\\n  --wait-for-published \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check Publish Status\n\nUse `scripts/check_status.py` when you already have a `publish_id`.\n\n```bash\npython3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n```\n\n## One-Time Scheduled Posting\n\nClawBus can also create a one-time scheduled TikTok posting task.\n\nPrepare:\n\n- videos or images uploaded to Google Drive or another reachable location;\n- a Google Sheet with post title, publish date, publish time, and video URL;\n- sharing access granted only to the trusted account or service that needs to\n  read the table.\n\nExample request:\n\n```text\nPlease help me create a one-time scheduled task. The task involves publishing videos or images to a TikTok account using the tiktok-publish skill, based on the title, date, time, and video URL data found in this table: GOOGLE_SHEET_URL\n```\n\nBefore scheduling, review every row in the sheet and confirm the account,\npublish time, title, and video URL. When the publishing task reports success,\nopen TikTok and confirm the post is live.\n\n## Parameters\n\n| Parameter | Required | Purpose |\n| --- | --- | --- |\n| `--source` | Yes | Direct video URL or local video file path. |\n| `--title` | Yes | TikTok post title. |\n| `--privacy-level` | No | `SELF_ONLY` by default; use `PUBLIC` only when ready to post live. |\n| `--wait-for-published` | No | Poll until the publish job completes. |\n| `--poll-interval` | No | Polling interval in milliseconds. |\n| `--poll-timeout` | No | Polling timeout in milliseconds. |\n| `--config` | No | Path to workspace `config.json`. |\n\nBefore publishing, confirm the TikTok account, video source, title or caption,\nand privacy setting. For test posts, use `SELF_ONLY` first.\n\nFile v1.1.17:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"tiktok-publish\",\n  \"version\": \"1.1.17\",\n  \"publishedAt\": 1779118067732\n}\n\nFile v1.1.17:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing scripts cannot find TikTok credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe scripts support these configuration sources:\n\n1. Environment variables:\n   - `TIKTOK_API_KEY`\n   - `TIKTOK_AUTHORIZATION_TOKEN`\n   - optional `TIKTOK_PUBLISHER_CONFIG`\n2. A workspace `config.json` file with a `tiktok` object\n\nEnvironment variables take precedence over values from `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens into the repository.\n- Prefer environment variables in shared environments.\n- Do not print secrets in terminal output or logs.\n\nFile v1.1.17:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish from a remote URL\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\n## Publish from a local file\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Hello from local file\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\n## Publish with explicit polling options\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Scheduled check\" \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check status\n\n```bash\npython3 scripts/check_status.py \\\n  --publish-id \"abc123\"\n```\n\nArchive v1.1.16: 6 files, 6597 bytes\n\nFiles: references/configuration.md (820b), references/publishing-examples.md (771b), scripts/check_status.py (1661b), scripts/publish_tiktok.py (3358b), SKILL.md (7849b), _meta.json (134b)\n\nFile v1.1.16:SKILL.md\n\n---\nname: TikTok Publisher\ndescription: >\n  Post to TikTok, upload TikTok videos, and publish TikTok video content\n  through the MyBrandMetrics API. Use for TikTok posting, uploading TikTok\n  videos, publishing TikTok videos, scheduling TikTok posts, or checking TikTok\n  publishing status. Supports local video files, remote video\n  URLs, post titles, privacy levels, publish status checks, chat-based posting,\n  and one-time scheduled posting tasks from a Google Sheet.\n---\n\n# TikTok Publisher\n\nPost to TikTok, upload TikTok videos, and publish TikTok video content through\nthe MyBrandMetrics API from a local file or a remote video URL.\n\nUse this skill to post to TikTok, upload TikTok videos, publish TikTok videos,\nschedule TikTok posts, check TikTok publishing status, or create a one-time\nscheduled TikTok posting task.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Remote URL publishing | Submit a direct `https://` video URL to TikTok through MyBrandMetrics. |\n| Local file publishing | Upload a local video file with multipart form data. |\n| Post metadata | Set the TikTok post title and privacy level. |\n| Chat-based posting | Use natural-language prompts in chat after the skill is installed. |\n| One-time scheduled tasks | Create a scheduled publishing task from a Google Sheet containing title, date, time, and video URL rows. |\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics, open **Data sources**.\n3. Choose `connect tiktok feed`.\n4. Complete the TikTok authorization flow if prompted.\n5. Get the MyBrandMetrics API key.\n6. Add the API key to `/root/.openclaw/workspace/config.json`:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n7. Install the `tiktok-publish` skill.\n8. Start publishing or checking TikTok publish status with this skill.\n\n## Workflow\n\nUse this workflow to post to TikTok, upload a TikTok video, publish a TikTok\nvideo, schedule TikTok posts, or check a TikTok publishing job.\n\n1. **Confirm the publishing goal.**\n   Choose whether to publish from a remote video URL, upload a local video\n   file, check an existing publish job, or prepare a scheduled posting\n   workflow.\n\n2. **Confirm the TikTok setup.**\n   Sign in to MyBrandMetrics with Google, connect TikTok as a data source, and\n   get a MyBrandMetrics API key.\n\n3. **Prepare credentials.**\n   Add the MyBrandMetrics API key to the workspace config:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n4. **Collect post details.**\n   Prepare the TikTok video source, post title, privacy level, and publishing\n   preference.\n\n   Useful defaults:\n\n   - choose `SELF_ONLY` for test posts;\n   - choose `PUBLIC` when the post is ready to go live;\n   - use a concise title or caption;\n   - use a remote video URL or local video file that is ready to publish.\n\n5. **Publish the TikTok video.**\n   Use the skill to publish from a remote URL or local file. The workflow can\n   also wait for the publishing job to finish when needed.\n\n   Example prompt:\n\n   ```text\n   Post this video to TikTok: https://example.com/video.mp4 with the caption \"Test\".\n   ```\n\n6. **Check publish status.**\n   If a publish identifier is returned, use it to check the TikTok publish\n   status later. After the job succeeds, confirm the result in the connected\n   TikTok account.\n\n### Drafts, Carousels, And Scheduling\n\nThe current script supports video publishing from a remote URL or local file.\n\nKnown workflow notes:\n\n- Draft-style flows may appear as a TikTok notification that the video is ready\n  to edit, rather than as a normal profile draft.\n- Image carousel publishing may require phone-friendly image dimensions such as\n  1080x1920. Oversized generated images can fail TikTok image checks.\n- Scheduled posting should be treated as an automation workflow: confirm the\n  sheet columns, publish date, publish time, video URL, title, privacy level,\n  and account before creating the task.\n\n### Common Errors\n\n| Error | Likely cause | Fix |\n| --- | --- | --- |\n| `401 invalid token format` | API key was sent in the wrong auth format or the key is invalid. | Use the MyBrandMetrics API key configuration supported by this skill. Do not use a bearer-token format. |\n| `picture_size_check_failed` | Image dimensions do not meet TikTok requirements. | Resize images to a phone-friendly format such as 1080x1920 and retry. |\n| `duration_check` | Video is too short. | Use a video that is at least 3 seconds long. |\n| `invalid_params` | Title, caption, media, or request parameters are invalid. | Simplify the title, reduce hashtags, and recheck the source URL or local path. |\n\n## Authentication\n\nTikTok authorization is handled through MyBrandMetrics. Sign in with Google,\nconnect TikTok as a data source, get the MyBrandMetrics API key, and add it to\n`/root/.openclaw/workspace/config.json`:\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nExample:\n\n```text\nPost this video to TikTok: https://example.com/video.mp4 with the caption \"Test\".\n```\n\nThe chat request should include:\n\n- the video URL or file reference;\n- the caption or title;\n- whether the post should be a test or public post;\n- whether to wait for publish completion.\n\nAfter the posting flow finishes, check the response and confirm the TikTok\nupload succeeded.\n\n## Use The Scripts Directly\n\nUse `scripts/publish_tiktok.py`.\n\nRemote URL:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\nLocal file:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Launch clip\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\nWith explicit polling controls:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Campaign preview\" \\\n  --privacy-level \"SELF_ONLY\" \\\n  --wait-for-published \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check Publish Status\n\nUse `scripts/check_status.py` when you already have a `publish_id`.\n\n```bash\npython3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n```\n\n## One-Time Scheduled Posting\n\nClawBus can also create a one-time scheduled TikTok posting task.\n\nPrepare:\n\n- videos or images uploaded to Google Drive or another reachable location;\n- a Google Sheet with post title, publish date, publish time, and video URL;\n- sharing access granted only to the trusted account or service that needs to\n  read the table.\n\nExample request:\n\n```text\nPlease help me create a one-time scheduled task. The task involves publishing videos or images to a TikTok account using the tiktok-publish skill, based on the title, date, time, and video URL data found in this table: GOOGLE_SHEET_URL\n```\n\nBefore scheduling, review every row in the sheet and confirm the account,\npublish time, title, and video URL. When the publishing task reports success,\nopen TikTok and confirm the post is live.\n\n## Parameters\n\n| Parameter | Required | Purpose |\n| --- | --- | --- |\n| `--source` | Yes | Direct video URL or local video file path. |\n| `--title` | Yes | TikTok post title. |\n| `--privacy-level` | No | `SELF_ONLY` by default; use `PUBLIC` only when ready to post live. |\n| `--wait-for-published` | No | Poll until the publish job completes. |\n| `--poll-interval` | No | Polling interval in milliseconds. |\n| `--poll-timeout` | No | Polling timeout in milliseconds. |\n| `--config` | No | Path to workspace `config.json`. |\n\nBefore publishing, confirm the TikTok account, video source, title or caption,\nand privacy setting. For test posts, use `SELF_ONLY` first.\n\nFile v1.1.16:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"tiktok-publish\",\n  \"version\": \"1.1.16\",\n  \"publishedAt\": 1779117834920\n}\n\nFile v1.1.16:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing scripts cannot find TikTok credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe scripts support these configuration sources:\n\n1. Environment variables:\n   - `TIKTOK_API_KEY`\n   - `TIKTOK_AUTHORIZATION_TOKEN`\n   - optional `TIKTOK_PUBLISHER_CONFIG`\n2. A workspace `config.json` file with a `tiktok` object\n\nEnvironment variables take precedence over values from `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens into the repository.\n- Prefer environment variables in shared environments.\n- Do not print secrets in terminal output or logs.\n\nFile v1.1.16:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish from a remote URL\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\n## Publish from a local file\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Hello from local file\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\n## Publish with explicit polling options\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Scheduled check\" \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check status\n\n```bash\npython3 scripts/check_status.py \\\n  --publish-id \"abc123\"\n```\n\nArchive v1.1.15: 6 files, 6796 bytes\n\nFiles: references/configuration.md (820b), references/publishing-examples.md (771b), scripts/check_status.py (1661b), scripts/publish_tiktok.py (3358b), SKILL.md (8533b), _meta.json (134b)\n\nFile v1.1.15:SKILL.md\n\n---\nname: TikTok Publisher\ndescription: >\n  Post to TikTok, upload TikTok videos, and publish TikTok video content\n  through the MyBrandMetrics API. Use for TikTok posting, uploading TikTok\n  videos, publishing TikTok videos, scheduling TikTok posts, or checking TikTok\n  publishing status. Supports local video files, remote video\n  URLs, post titles, privacy levels, publish status checks, chat-based posting,\n  and one-time scheduled posting tasks from a Google Sheet.\n---\n\n# TikTok Publisher\n\nPost to TikTok, upload TikTok videos, and publish TikTok video content through\nthe MyBrandMetrics API from a local file or a remote video URL.\n\nUse this skill to post to TikTok, upload TikTok videos, publish TikTok videos,\nschedule TikTok posts, check TikTok publishing status, or create a one-time\nscheduled TikTok posting task.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Remote URL publishing | Submit a direct `https://` video URL to TikTok through MyBrandMetrics. |\n| Local file publishing | Upload a local video file with multipart form data. |\n| Post metadata | Set the TikTok post title and privacy level. |\n| Chat-based posting | Use natural-language prompts in chat after the skill is installed. |\n| One-time scheduled tasks | Create a scheduled publishing task from a Google Sheet containing title, date, time, and video URL rows. |\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics, open **Data sources**.\n3. Choose `connect tiktok feed`.\n4. Complete the TikTok authorization flow if prompted.\n5. Get the MyBrandMetrics API key.\n6. Add the API key to `/root/.openclaw/workspace/config.json`:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n7. Install the `tiktok-publish` skill.\n8. Start publishing or checking TikTok publish status with this skill.\n\n## Workflow\n\nUse this workflow to post to TikTok, upload a TikTok video, publish a TikTok\nvideo, schedule TikTok posts, or check a TikTok publishing job.\n\n1. **Confirm the publishing goal.**\n   Choose whether to publish from a remote video URL, upload a local video\n   file, check an existing publish job, or prepare a scheduled posting\n   workflow.\n\n2. **Confirm the TikTok setup.**\n   Sign in to MyBrandMetrics with Google, connect TikTok as a data source, and\n   get a MyBrandMetrics API key.\n\n3. **Prepare credentials.**\n   Add the MyBrandMetrics API key to the workspace config:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n4. **Collect post details.**\n   Confirm the exact video source, post title, privacy level, and whether to\n   wait for the publishing job to finish.\n\n   Recommended defaults:\n\n   - use `SELF_ONLY` for tests;\n   - use `PUBLIC` only when the post is ready;\n   - keep titles concise and avoid excessive hashtags;\n   - use videos that are at least 3 seconds long.\n\n5. **Run the publishing command.**\n\n   Remote video URL:\n\n   ```bash\n   python3 scripts/publish_tiktok.py \\\n     --source \"https://example.com/video.mp4\" \\\n     --title \"My TikTok Title\" \\\n     --privacy-level \"SELF_ONLY\"\n   ```\n\n   Local video file:\n\n   ```bash\n   python3 scripts/publish_tiktok.py \\\n     --source \"/path/to/video.mp4\" \\\n     --title \"Launch clip\" \\\n     --privacy-level \"PUBLIC\" \\\n     --wait-for-published\n   ```\n\n6. **Review the response.**\n   Save the returned publish identifier if one is provided. If the response\n   says the post is pending, wait or check status later.\n\n7. **Check status when needed.**\n\n   ```bash\n   python3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n   ```\n\n8. **Confirm the result in TikTok.**\n   After the publishing job reports success, open the connected TikTok account\n   and confirm the post is live or ready for the next step.\n\n### Drafts, Carousels, And Scheduling\n\nThe current script supports video publishing from a remote URL or local file.\n\nKnown workflow notes:\n\n- Draft-style flows may appear as a TikTok notification that the video is ready\n  to edit, rather than as a normal profile draft.\n- Image carousel publishing may require phone-friendly image dimensions such as\n  1080x1920. Oversized generated images can fail TikTok image checks.\n- Scheduled posting should be treated as an automation workflow: confirm the\n  sheet columns, publish date, publish time, video URL, title, privacy level,\n  and account before creating the task.\n\n### Common Errors\n\n| Error | Likely cause | Fix |\n| --- | --- | --- |\n| `401 invalid token format` | API key was sent in the wrong auth format or the key is invalid. | Use the MyBrandMetrics API key configuration supported by this skill. Do not use a bearer-token format. |\n| `picture_size_check_failed` | Image dimensions do not meet TikTok requirements. | Resize images to a phone-friendly format such as 1080x1920 and retry. |\n| `duration_check` | Video is too short. | Use a video that is at least 3 seconds long. |\n| `invalid_params` | Title, caption, media, or request parameters are invalid. | Simplify the title, reduce hashtags, and recheck the source URL or local path. |\n\n## Authentication\n\nTikTok authorization is handled through MyBrandMetrics.\n\n1. Sign in to MyBrandMetrics with Google.\n2. Connect TikTok as a data source.\n3. Make sure the TikTok connection is active before publishing.\n\nFor direct script usage, provide the MyBrandMetrics API key through\n`/root/.openclaw/workspace/config.json`:\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name. Environment\nvariables are supported for advanced setups, but `config.json` is the default\nsetup path.\n\nExample:\n\n```text\nPost this video to TikTok: https://example.com/video.mp4 with the caption \"Test\".\n```\n\nThe chat request should include:\n\n- the video URL or file reference;\n- the caption or title;\n- whether the post should be a test or public post;\n- whether to wait for publish completion.\n\nAfter the posting flow finishes, check the response and confirm the TikTok\nupload succeeded.\n\n## Use The Scripts Directly\n\nUse `scripts/publish_tiktok.py`.\n\nRemote URL:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\nLocal file:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Launch clip\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\nWith explicit polling controls:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Campaign preview\" \\\n  --privacy-level \"SELF_ONLY\" \\\n  --wait-for-published \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check Publish Status\n\nUse `scripts/check_status.py` when you already have a `publish_id`.\n\n```bash\npython3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n```\n\n## One-Time Scheduled Posting\n\nClawBus can also create a one-time scheduled TikTok posting task.\n\nPrepare:\n\n- videos or images uploaded to Google Drive or another reachable location;\n- a Google Sheet with post title, publish date, publish time, and video URL;\n- sharing access granted only to the trusted account or service that needs to\n  read the table.\n\nExample request:\n\n```text\nPlease help me create a one-time scheduled task. The task involves publishing videos or images to a TikTok account using the tiktok-publish skill, based on the title, date, time, and video URL data found in this table: GOOGLE_SHEET_URL\n```\n\nBefore scheduling, review every row in the sheet and confirm the account,\npublish time, title, and video URL. When the publishing task reports success,\nopen TikTok and confirm the post is live.\n\n## Parameters\n\n| Parameter | Required | Purpose |\n| --- | --- | --- |\n| `--source` | Yes | Direct video URL or local video file path. |\n| `--title` | Yes | TikTok post title. |\n| `--privacy-level` | No | `SELF_ONLY` by default; use `PUBLIC` only when ready to post live. |\n| `--wait-for-published` | No | Poll until the publish job completes. |\n| `--poll-interval` | No | Polling interval in milliseconds. |\n| `--poll-timeout` | No | Polling timeout in milliseconds. |\n| `--config` | No | Path to workspace `config.json`. |\n\nBefore publishing, confirm the TikTok account, video source, title or caption,\nand privacy setting. For test posts, use `SELF_ONLY` first.\n\nFile v1.1.15:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"tiktok-publish\",\n  \"version\": \"1.1.15\",\n  \"publishedAt\": 1779116998943\n}\n\nFile v1.1.15:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing scripts cannot find TikTok credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe scripts support these configuration sources:\n\n1. Environment variables:\n   - `TIKTOK_API_KEY`\n   - `TIKTOK_AUTHORIZATION_TOKEN`\n   - optional `TIKTOK_PUBLISHER_CONFIG`\n2. A workspace `config.json` file with a `tiktok` object\n\nEnvironment variables take precedence over values from `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens into the repository.\n- Prefer environment variables in shared environments.\n- Do not print secrets in terminal output or logs.\n\nFile v1.1.15:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish from a remote URL\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\n## Publish from a local file\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Hello from local file\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\n## Publish with explicit polling options\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Scheduled check\" \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check status\n\n```bash\npython3 scripts/check_status.py \\\n  --publish-id \"abc123\"\n```\n\nArchive v1.1.14: 6 files, 6871 bytes\n\nFiles: references/configuration.md (820b), references/publishing-examples.md (771b), scripts/check_status.py (1661b), scripts/publish_tiktok.py (3358b), SKILL.md (8793b), _meta.json (134b)\n\nFile v1.1.14:SKILL.md\n\n---\nname: TikTok Publisher\ndescription: >\n  Post to TikTok, upload TikTok videos, and publish TikTok video content\n  through the MyBrandMetrics API. Use for TikTok posting, uploading TikTok\n  videos, publishing TikTok videos, scheduling TikTok posts, or checking TikTok\n  publishing status. Supports local video files, remote video\n  URLs, post titles, privacy levels, publish status checks, chat-based posting,\n  and one-time scheduled posting tasks from a Google Sheet.\n---\n\n# TikTok Publisher\n\nPost to TikTok, upload TikTok videos, and publish TikTok video content through\nthe MyBrandMetrics API from a local file or a remote video URL.\n\nUse this skill to post to TikTok, upload TikTok videos, publish TikTok videos,\nschedule TikTok posts, check TikTok publishing status, or create a one-time\nscheduled TikTok posting task.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Remote URL publishing | Submit a direct `https://` video URL to TikTok through MyBrandMetrics. |\n| Local file publishing | Upload a local video file with multipart form data. |\n| Post metadata | Set the TikTok post title and privacy level. |\n| Chat-based posting | Use natural-language prompts in chat after the skill is installed. |\n| One-time scheduled tasks | Create a scheduled publishing task from a Google Sheet containing title, date, time, and video URL rows. |\n\n## Requirements\n\n- Access to MyBrandMetrics.\n- A MyBrandMetrics API key for TikTok publishing.\n- A video source, either a direct remote URL or a local file path.\n- A post title.\n- A privacy level, usually `SELF_ONLY` for testing or `PUBLIC` for live posting.\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics, open **Data sources**.\n3. Choose `connect tiktok feed`.\n4. Complete the TikTok authorization flow if prompted.\n5. Get the MyBrandMetrics API key.\n6. Add the API key to `/root/.openclaw/workspace/config.json`:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n7. Install the `tiktok-publish` skill.\n8. Start publishing or checking TikTok publish status with this skill.\n\n## Workflow\n\nUse this workflow to post to TikTok, upload a TikTok video, publish a TikTok\nvideo, schedule TikTok posts, or check a TikTok publishing job.\n\n1. **Confirm the publishing goal.**\n   Choose whether to publish from a remote video URL, upload a local video\n   file, check an existing publish job, or prepare a scheduled posting\n   workflow.\n\n2. **Confirm the TikTok setup.**\n   Sign in to MyBrandMetrics with Google, connect TikTok as a data source, and\n   get a MyBrandMetrics API key.\n\n3. **Prepare credentials.**\n   Add the MyBrandMetrics API key to the workspace config:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n4. **Collect post details.**\n   Confirm the exact video source, post title, privacy level, and whether to\n   wait for the publishing job to finish.\n\n   Recommended defaults:\n\n   - use `SELF_ONLY` for tests;\n   - use `PUBLIC` only when the post is ready;\n   - keep titles concise and avoid excessive hashtags;\n   - use videos that are at least 3 seconds long.\n\n5. **Run the publishing command.**\n\n   Remote video URL:\n\n   ```bash\n   python3 scripts/publish_tiktok.py \\\n     --source \"https://example.com/video.mp4\" \\\n     --title \"My TikTok Title\" \\\n     --privacy-level \"SELF_ONLY\"\n   ```\n\n   Local video file:\n\n   ```bash\n   python3 scripts/publish_tiktok.py \\\n     --source \"/path/to/video.mp4\" \\\n     --title \"Launch clip\" \\\n     --privacy-level \"PUBLIC\" \\\n     --wait-for-published\n   ```\n\n6. **Review the response.**\n   Save the returned publish identifier if one is provided. If the response\n   says the post is pending, wait or check status later.\n\n7. **Check status when needed.**\n\n   ```bash\n   python3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n   ```\n\n8. **Confirm the result in TikTok.**\n   After the publishing job reports success, open the connected TikTok account\n   and confirm the post is live or ready for the next step.\n\n### Drafts, Carousels, And Scheduling\n\nThe current script supports video publishing from a remote URL or local file.\n\nKnown workflow notes:\n\n- Draft-style flows may appear as a TikTok notification that the video is ready\n  to edit, rather than as a normal profile draft.\n- Image carousel publishing may require phone-friendly image dimensions such as\n  1080x1920. Oversized generated images can fail TikTok image checks.\n- Scheduled posting should be treated as an automation workflow: confirm the\n  sheet columns, publish date, publish time, video URL, title, privacy level,\n  and account before creating the task.\n\n### Common Errors\n\n| Error | Likely cause | Fix |\n| --- | --- | --- |\n| `401 invalid token format` | API key was sent in the wrong auth format or the key is invalid. | Use the MyBrandMetrics API key configuration supported by this skill. Do not use a bearer-token format. |\n| `picture_size_check_failed` | Image dimensions do not meet TikTok requirements. | Resize images to a phone-friendly format such as 1080x1920 and retry. |\n| `duration_check` | Video is too short. | Use a video that is at least 3 seconds long. |\n| `invalid_params` | Title, caption, media, or request parameters are invalid. | Simplify the title, reduce hashtags, and recheck the source URL or local path. |\n\n## Authentication\n\nTikTok authorization is handled through MyBrandMetrics.\n\n1. Sign in to MyBrandMetrics with Google.\n2. Connect TikTok as a data source.\n3. Make sure the TikTok connection is active before publishing.\n\nFor direct script usage, provide the MyBrandMetrics API key through\n`/root/.openclaw/workspace/config.json`:\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name. Environment\nvariables are supported for advanced setups, but `config.json` is the default\nsetup path.\n\nExample:\n\n```text\nPost this video to TikTok: https://example.com/video.mp4 with the caption \"Test\".\n```\n\nThe chat request should include:\n\n- the video URL or file reference;\n- the caption or title;\n- whether the post should be a test or public post;\n- whether to wait for publish completion.\n\nAfter the posting flow finishes, check the response and confirm the TikTok\nupload succeeded.\n\n## Use The Scripts Directly\n\nUse `scripts/publish_tiktok.py`.\n\nRemote URL:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\nLocal file:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Launch clip\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\nWith explicit polling controls:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Campaign preview\" \\\n  --privacy-level \"SELF_ONLY\" \\\n  --wait-for-published \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check Publish Status\n\nUse `scripts/check_status.py` when you already have a `publish_id`.\n\n```bash\npython3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n```\n\n## One-Time Scheduled Posting\n\nClawBus can also create a one-time scheduled TikTok posting task.\n\nPrepare:\n\n- videos or images uploaded to Google Drive or another reachable location;\n- a Google Sheet with post title, publish date, publish time, and video URL;\n- sharing access granted only to the trusted account or service that needs to\n  read the table.\n\nExample request:\n\n```text\nPlease help me create a one-time scheduled task. The task involves publishing videos or images to a TikTok account using the tiktok-publish skill, based on the title, date, time, and video URL data found in this table: GOOGLE_SHEET_URL\n```\n\nBefore scheduling, review every row in the sheet and confirm the account,\npublish time, title, and video URL. When the publishing task reports success,\nopen TikTok and confirm the post is live.\n\n## Parameters\n\n| Parameter | Required | Purpose |\n| --- | --- | --- |\n| `--source` | Yes | Direct video URL or local video file path. |\n| `--title` | Yes | TikTok post title. |\n| `--privacy-level` | No | `SELF_ONLY` by default; use `PUBLIC` only when ready to post live. |\n| `--wait-for-published` | No | Poll until the publish job completes. |\n| `--poll-interval` | No | Polling interval in milliseconds. |\n| `--poll-timeout` | No | Polling timeout in milliseconds. |\n| `--config` | No | Path to workspace `config.json`. |\n\nBefore publishing, confirm the TikTok account, video source, title or caption,\nand privacy setting. For test posts, use `SELF_ONLY` first.\n\nFile v1.1.14:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"tiktok-publish\",\n  \"version\": \"1.1.14\",\n  \"publishedAt\": 1779116781964\n}\n\nFile v1.1.14:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing scripts cannot find TikTok credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe scripts support these configuration sources:\n\n1. Environment variables:\n   - `TIKTOK_API_KEY`\n   - `TIKTOK_AUTHORIZATION_TOKEN`\n   - optional `TIKTOK_PUBLISHER_CONFIG`\n2. A workspace `config.json` file with a `tiktok` object\n\nEnvironment variables take precedence over values from `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens into the repository.\n- Prefer environment variables in shared environments.\n- Do not print secrets in terminal output or logs.\n\nFile v1.1.14:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish from a remote URL\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\n## Publish from a local file\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Hello from local file\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\n## Publish with explicit polling options\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Scheduled check\" \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check status\n\n```bash\npython3 scripts/check_status.py \\\n  --publish-id \"abc123\"\n```\n\nArchive v1.1.13: 6 files, 6906 bytes\n\nFiles: references/configuration.md (820b), references/publishing-examples.md (771b), scripts/check_status.py (1661b), scripts/publish_tiktok.py (3358b), SKILL.md (9249b), _meta.json (134b)\n\nFile v1.1.13:SKILL.md\n\n---\nname: TikTok Publisher\ndescription: >\n  Post to TikTok, upload TikTok videos, and publish TikTok video content\n  through the MyBrandMetrics (https://mybrandmetrics.com/) API. Use for TikTok\n  posting, uploading TikTok videos, publishing TikTok videos, scheduling TikTok\n  posts, or checking TikTok publishing status. Supports local video files,\n  remote video URLs, post titles, privacy levels, publish status checks,\n  chat-based posting, and one-time scheduled posting tasks from a Google Sheet.\n---\n\n# TikTok Publisher\n\nPost to TikTok, upload TikTok videos, and publish TikTok video content through\nthe MyBrandMetrics (https://mybrandmetrics.com/) API from a local file or a\nremote video URL.\n\nUse this skill to post to TikTok, upload TikTok videos, publish TikTok videos,\nschedule TikTok posts, check TikTok publishing status, or create a one-time\nscheduled TikTok posting task.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics (https://mybrandmetrics.com/) API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Remote URL publishing | Submit a direct `https://` video URL to TikTok through MyBrandMetrics (https://mybrandmetrics.com/). |\n| Local file publishing | Upload a local video file with multipart form data. |\n| Post metadata | Set the TikTok post title and privacy level. |\n| Chat-based posting | Use natural-language prompts in chat after the skill is installed. |\n| One-time scheduled tasks | Create a scheduled publishing task from a Google Sheet containing title, date, time, and video URL rows. |\n\n## Requirements\n\n- Access to MyBrandMetrics (https://mybrandmetrics.com/).\n- A MyBrandMetrics (https://mybrandmetrics.com/) API key for TikTok publishing.\n- A video source, either a direct remote URL or a local file path.\n- A post title.\n- A privacy level, usually `SELF_ONLY` for testing or `PUBLIC` for live posting.\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics (https://mybrandmetrics.com/), open **Data sources**.\n3. Choose `connect tiktok feed`.\n4. Complete the TikTok authorization flow if prompted.\n5. Get the MyBrandMetrics (https://mybrandmetrics.com/) API key.\n6. Add the API key to `/root/.openclaw/workspace/config.json`:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n7. Install the `tiktok-publish` skill.\n8. Start publishing or checking TikTok publish status with this skill.\n\n## Workflow\n\nUse this workflow to post to TikTok, upload a TikTok video, publish a TikTok\nvideo, schedule TikTok posts, or check a TikTok publishing job.\n\n1. **Confirm the publishing goal.**\n   Choose whether to publish from a remote video URL, upload a local video\n   file, check an existing publish job, or prepare a scheduled posting\n   workflow.\n\n2. **Confirm the TikTok setup.**\n   Sign in to MyBrandMetrics (https://mybrandmetrics.com/) with Google,\n   connect TikTok as a data source, and get a MyBrandMetrics\n   (https://mybrandmetrics.com/) API key.\n\n3. **Prepare credentials.**\n   Add the MyBrandMetrics (https://mybrandmetrics.com/) API key to the\n   workspace config:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n4. **Collect post details.**\n   Confirm the exact video source, post title, privacy level, and whether to\n   wait for the publishing job to finish.\n\n   Recommended defaults:\n\n   - use `SELF_ONLY` for tests;\n   - use `PUBLIC` only when the post is ready;\n   - keep titles concise and avoid excessive hashtags;\n   - use videos that are at least 3 seconds long.\n\n5. **Run the publishing command.**\n\n   Remote video URL:\n\n   ```bash\n   python3 scripts/publish_tiktok.py \\\n     --source \"https://example.com/video.mp4\" \\\n     --title \"My TikTok Title\" \\\n     --privacy-level \"SELF_ONLY\"\n   ```\n\n   Local video file:\n\n   ```bash\n   python3 scripts/publish_tiktok.py \\\n     --source \"/path/to/video.mp4\" \\\n     --title \"Launch clip\" \\\n     --privacy-level \"PUBLIC\" \\\n     --wait-for-published\n   ```\n\n6. **Review the response.**\n   Save the returned publish identifier if one is provided. If the response\n   says the post is pending, wait or check status later.\n\n7. **Check status when needed.**\n\n   ```bash\n   python3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n   ```\n\n8. **Confirm the result in TikTok.**\n   After the publishing job reports success, open the connected TikTok account\n   and confirm the post is live or ready for the next step.\n\n### Drafts, Carousels, And Scheduling\n\nThe current script supports video publishing from a remote URL or local file.\n\nKnown workflow notes:\n\n- Draft-style flows may appear as a TikTok notification that the video is ready\n  to edit, rather than as a normal profile draft.\n- Image carousel publishing may require phone-friendly image dimensions such as\n  1080x1920. Oversized generated images can fail TikTok image checks.\n- Scheduled posting should be treated as an automation workflow: confirm the\n  sheet columns, publish date, publish time, video URL, title, privacy level,\n  and account before creating the task.\n\n### Common Errors\n\n| Error | Likely cause | Fix |\n| --- | --- | --- |\n| `401 invalid token format` | API key was sent in the wrong auth format or the key is invalid. | Use the MyBrandMetrics (https://mybrandmetrics.com/) API key configuration supported by this skill. Do not use a bearer-token format. |\n| `picture_size_check_failed` | Image dimensions do not meet TikTok requirements. | Resize images to a phone-friendly format such as 1080x1920 and retry. |\n| `duration_check` | Video is too short. | Use a video that is at least 3 seconds long. |\n| `invalid_params` | Title, caption, media, or request parameters are invalid. | Simplify the title, reduce hashtags, and recheck the source URL or local path. |\n\n## Authentication\n\nTikTok authorization is handled through MyBrandMetrics\n(https://mybrandmetrics.com/).\n\n1. Sign in to MyBrandMetrics (https://mybrandmetrics.com/) with Google.\n2. Connect TikTok as a data source.\n3. Make sure the TikTok connection is active before publishing.\n\nFor direct script usage, provide the MyBrandMetrics\n(https://mybrandmetrics.com/) API key through `/root/.openclaw/workspace/config.json`:\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name. Environment\nvariables are supported for advanced setups, but `config.json` is the default\nsetup path.\n\nExample:\n\n```text\nPost this video to TikTok: https://example.com/video.mp4 with the caption \"Test\".\n```\n\nThe chat request should include:\n\n- the video URL or file reference;\n- the caption or title;\n- whether the post should be a test or public post;\n- whether to wait for publish completion.\n\nAfter the posting flow finishes, check the response and confirm the TikTok\nupload succeeded.\n\n## Use The Scripts Directly\n\nUse `scripts/publish_tiktok.py`.\n\nRemote URL:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\nLocal file:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Launch clip\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\nWith explicit polling controls:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Campaign preview\" \\\n  --privacy-level \"SELF_ONLY\" \\\n  --wait-for-published \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check Publish Status\n\nUse `scripts/check_status.py` when you already have a `publish_id`.\n\n```bash\npython3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n```\n\n## One-Time Scheduled Posting\n\nClawBus can also create a one-time scheduled TikTok posting task.\n\nPrepare:\n\n- videos or images uploaded to Google Drive or another reachable location;\n- a Google Sheet with post title, publish date, publish time, and video URL;\n- sharing access granted only to the trusted account or service that needs to\n  read the table.\n\nExample request:\n\n```text\nPlease help me create a one-time scheduled task. The task involves publishing videos or images to a TikTok account using the tiktok-publish skill, based on the title, date, time, and video URL data found in this table: GOOGLE_SHEET_URL\n```\n\nBefore scheduling, review every row in the sheet and confirm the account,\npublish time, title, and video URL. When the publishing task reports success,\nopen TikTok and confirm the post is live.\n\n## Parameters\n\n| Parameter | Required | Purpose |\n| --- | --- | --- |\n| `--source` | Yes | Direct video URL or local video file path. |\n| `--title` | Yes | TikTok post title. |\n| `--privacy-level` | No | `SELF_ONLY` by default; use `PUBLIC` only when ready to post live. |\n| `--wait-for-published` | No | Poll until the publish job completes. |\n| `--poll-interval` | No | Polling interval in milliseconds. |\n| `--poll-timeout` | No | Polling timeout in milliseconds. |\n| `--config` | No | Path to workspace `config.json`. |\n\nBefore publishing, confirm the TikTok account, video source, title or caption,\nand privacy setting. For test posts, use `SELF_ONLY` first.\n\nFile v1.1.13:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"tiktok-publish\",\n  \"version\": \"1.1.13\",\n  \"publishedAt\": 1779116420867\n}\n\nFile v1.1.13:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing scripts cannot find TikTok credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe scripts support these configuration sources:\n\n1. Environment variables:\n   - `TIKTOK_API_KEY`\n   - `TIKTOK_AUTHORIZATION_TOKEN`\n   - optional `TIKTOK_PUBLISHER_CONFIG`\n2. A workspace `config.json` file with a `tiktok` object\n\nEnvironment variables take precedence over values from `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens into the repository.\n- Prefer environment variables in shared environments.\n- Do not print secrets in terminal output or logs.\n\nFile v1.1.13:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish from a remote URL\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\n## Publish from a local file\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Hello from local file\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\n## Publish with explicit polling options\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Scheduled check\" \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check status\n\n```bash\npython3 scripts/check_status.py \\\n  --publish-id \"abc123\"\n```\n\nArchive v1.1.12: 6 files, 6871 bytes\n\nFiles: references/configuration.md (820b), references/publishing-examples.md (771b), scripts/check_status.py (1661b), scripts/publish_tiktok.py (3358b), SKILL.md (8793b), _meta.json (134b)\n\nFile v1.1.12:SKILL.md\n\n---\nname: TikTok Publisher\ndescription: >\n  Post to TikTok, upload TikTok videos, and publish TikTok video content\n  through the MyBrandMetrics API. Use for TikTok posting, uploading TikTok\n  videos, publishing TikTok videos, scheduling TikTok posts, or checking TikTok\n  publishing status. Supports local video files, remote video\n  URLs, post titles, privacy levels, publish status checks, chat-based posting,\n  and one-time scheduled posting tasks from a Google Sheet.\n---\n\n# TikTok Publisher\n\nPost to TikTok, upload TikTok videos, and publish TikTok video content through\nthe MyBrandMetrics API from a local file or a remote video URL.\n\nUse this skill to post to TikTok, upload TikTok videos, publish TikTok videos,\nschedule TikTok posts, check TikTok publishing status, or create a one-time\nscheduled TikTok posting task.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Remote URL publishing | Submit a direct `https://` video URL to TikTok through MyBrandMetrics. |\n| Local file publishing | Upload a local video file with multipart form data. |\n| Post metadata | Set the TikTok post title and privacy level. |\n| Chat-based posting | Use natural-language prompts in chat after the skill is installed. |\n| One-time scheduled tasks | Create a scheduled publishing task from a Google Sheet containing title, date, time, and video URL rows. |\n\n## Requirements\n\n- Access to MyBrandMetrics.\n- A MyBrandMetrics API key for TikTok publishing.\n- A video source, either a direct remote URL or a local file path.\n- A post title.\n- A privacy level, usually `SELF_ONLY` for testing or `PUBLIC` for live posting.\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics, open **Data sources**.\n3. Choose `connect tiktok feed`.\n4. Complete the TikTok authorization flow if prompted.\n5. Get the MyBrandMetrics API key.\n6. Add the API key to `/root/.openclaw/workspace/config.json`:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n7. Install the `tiktok-publish` skill.\n8. Start publishing or checking TikTok publish status with this skill.\n\n## Workflow\n\nUse this workflow to post to TikTok, upload a TikTok video, publish a TikTok\nvideo, schedule TikTok posts, or check a TikTok publishing job.\n\n1. **Confirm the publishing goal.**\n   Choose whether to publish from a remote video URL, upload a local video\n   file, check an existing publish job, or prepare a scheduled posting\n   workflow.\n\n2. **Confirm the TikTok setup.**\n   Sign in to MyBrandMetrics with Google, connect TikTok as a data source, and\n   get a MyBrandMetrics API key.\n\n3. **Prepare credentials.**\n   Add the MyBrandMetrics API key to the workspace config:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n4. **Collect post details.**\n   Confirm the exact video source, post title, privacy level, and whether to\n   wait for the publishing job to finish.\n\n   Recommended defaults:\n\n   - use `SELF_ONLY` for tests;\n   - use `PUBLIC` only when the post is ready;\n   - keep titles concise and avoid excessive hashtags;\n   - use videos that are at least 3 seconds long.\n\n5. **Run the publishing command.**\n\n   Remote video URL:\n\n   ```bash\n   python3 scripts/publish_tiktok.py \\\n     --source \"https://example.com/video.mp4\" \\\n     --title \"My TikTok Title\" \\\n     --privacy-level \"SELF_ONLY\"\n   ```\n\n   Local video file:\n\n   ```bash\n   python3 scripts/publish_tiktok.py \\\n     --source \"/path/to/video.mp4\" \\\n     --title \"Launch clip\" \\\n     --privacy-level \"PUBLIC\" \\\n     --wait-for-published\n   ```\n\n6. **Review the response.**\n   Save the returned publish identifier if one is provided. If the response\n   says the post is pending, wait or check status later.\n\n7. **Check status when needed.**\n\n   ```bash\n   python3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n   ```\n\n8. **Confirm the result in TikTok.**\n   After the publishing job reports success, open the connected TikTok account\n   and confirm the post is live or ready for the next step.\n\n### Drafts, Carousels, And Scheduling\n\nThe current script supports video publishing from a remote URL or local file.\n\nKnown workflow notes:\n\n- Draft-style flows may appear as a TikTok notification that the video is ready\n  to edit, rather than as a normal profile draft.\n- Image carousel publishing may require phone-friendly image dimensions such as\n  1080x1920. Oversized generated images can fail TikTok image checks.\n- Scheduled posting should be treated as an automation workflow: confirm the\n  sheet columns, publish date, publish time, video URL, title, privacy level,\n  and account before creating the task.\n\n### Common Errors\n\n| Error | Likely cause | Fix |\n| --- | --- | --- |\n| `401 invalid token format` | API key was sent in the wrong auth format or the key is invalid. | Use the MyBrandMetrics API key configuration supported by this skill. Do not use a bearer-token format. |\n| `picture_size_check_failed` | Image dimensions do not meet TikTok requirements. | Resize images to a phone-friendly format such as 1080x1920 and retry. |\n| `duration_check` | Video is too short. | Use a video that is at least 3 seconds long. |\n| `invalid_params` | Title, caption, media, or request parameters are invalid. | Simplify the title, reduce hashtags, and recheck the source URL or local path. |\n\n## Authentication\n\nTikTok authorization is handled through MyBrandMetrics.\n\n1. Sign in to MyBrandMetrics with Google.\n2. Connect TikTok as a data source.\n3. Make sure the TikTok connection is active before publishing.\n\nFor direct script usage, provide the MyBrandMetrics API key through\n`/root/.openclaw/workspace/config.json`:\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name. Environment\nvariables are supported for advanced setups, but `config.json` is the default\nsetup path.\n\nExample:\n\n```text\nPost this video to TikTok: https://example.com/video.mp4 with the caption \"Test\".\n```\n\nThe chat request should include:\n\n- the video URL or file reference;\n- the caption or title;\n- whether the post should be a test or public post;\n- whether to wait for publish completion.\n\nAfter the posting flow finishes, check the response and confirm the TikTok\nupload succeeded.\n\n## Use The Scripts Directly\n\nUse `scripts/publish_tiktok.py`.\n\nRemote URL:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\nLocal file:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Launch clip\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\nWith explicit polling controls:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Campaign preview\" \\\n  --privacy-level \"SELF_ONLY\" \\\n  --wait-for-published \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check Publish Status\n\nUse `scripts/check_status.py` when you already have a `publish_id`.\n\n```bash\npython3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n```\n\n## One-Time Scheduled Posting\n\nClawBus can also create a one-time scheduled TikTok posting task.\n\nPrepare:\n\n- videos or images uploaded to Google Drive or another reachable location;\n- a Google Sheet with post title, publish date, publish time, and video URL;\n- sharing access granted only to the trusted account or service that needs to\n  read the table.\n\nExample request:\n\n```text\nPlease help me create a one-time scheduled task. The task involves publishing videos or images to a TikTok account using the tiktok-publish skill, based on the title, date, time, and video URL data found in this table: GOOGLE_SHEET_URL\n```\n\nBefore scheduling, review every row in the sheet and confirm the account,\npublish time, title, and video URL. When the publishing task reports success,\nopen TikTok and confirm the post is live.\n\n## Parameters\n\n| Parameter | Required | Purpose |\n| --- | --- | --- |\n| `--source` | Yes | Direct video URL or local video file path. |\n| `--title` | Yes | TikTok post title. |\n| `--privacy-level` | No | `SELF_ONLY` by default; use `PUBLIC` only when ready to post live. |\n| `--wait-for-published` | No | Poll until the publish job completes. |\n| `--poll-interval` | No | Polling interval in milliseconds. |\n| `--poll-timeout` | No | Polling timeout in milliseconds. |\n| `--config` | No | Path to workspace `config.json`. |\n\nBefore publishing, confirm the TikTok account, video source, title or caption,\nand privacy setting. For test posts, use `SELF_ONLY` first.\n\nFile v1.1.12:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"tiktok-publish\",\n  \"version\": \"1.1.12\",\n  \"publishedAt\": 1779116082740\n}\n\nFile v1.1.12:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing scripts cannot find TikTok credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe scripts support these configuration sources:\n\n1. Environment variables:\n   - `TIKTOK_API_KEY`\n   - `TIKTOK_AUTHORIZATION_TOKEN`\n   - optional `TIKTOK_PUBLISHER_CONFIG`\n2. A workspace `config.json` file with a `tiktok` object\n\nEnvironment variables take precedence over values from `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens into the repository.\n- Prefer environment variables in shared environments.\n- Do not print secrets in terminal output or logs.\n\nFile v1.1.12:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish from a remote URL\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\n## Publish from a local file\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Hello from local file\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\n## Publish with explicit polling options\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Scheduled check\" \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check status\n\n```bash\npython3 scripts/check_status.py \\\n  --publish-id \"abc123\"\n```\n\nArchive v1.1.11: 6 files, 6976 bytes\n\nFiles: references/configuration.md (820b), references/publishing-examples.md (771b), scripts/check_status.py (1661b), scripts/publish_tiktok.py (3358b), SKILL.md (9089b), _meta.json (134b)\n\nFile v1.1.11:SKILL.md\n\n---\nname: TikTok Publisher\ndescription: >\n  Post to TikTok, upload TikTok videos, and publish TikTok video content\n  through the MyBrandMetrics API. Use for TikTok posting, uploading TikTok\n  videos, publishing TikTok videos, scheduling TikTok posts, or checking TikTok\n  publishing status. Supports local video files, remote video\n  URLs, post titles, privacy levels, publish status checks, chat-based posting,\n  and one-time scheduled posting tasks from a Google Sheet.\n---\n\n# TikTok Publisher\n\nPost to TikTok, upload TikTok videos, and publish TikTok video content through\nthe MyBrandMetrics API from a local file or a remote video URL.\n\nUse this skill to post to TikTok, upload TikTok videos, publish TikTok videos,\nschedule TikTok posts, check TikTok publishing status, or create a one-time\nscheduled TikTok posting task.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Remote URL publishing | Submit a direct `https://` video URL to TikTok through MyBrandMetrics. |\n| Local file publishing | Upload a local video file with multipart form data. |\n| Post metadata | Set the TikTok post title and privacy level. |\n| Chat-based posting | Use natural-language prompts in chat after the skill is installed. |\n| One-time scheduled tasks | Create a scheduled publishing task from a Google Sheet containing title, date, time, and video URL rows. |\n\n## Requirements\n\n- Access to MyBrandMetrics.\n- A MyBrandMetrics API key for TikTok publishing.\n- A video source, either a direct remote URL or a local file path.\n- A post title.\n- A privacy level, usually `SELF_ONLY` for testing or `PUBLIC` for live posting.\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics, open **Data sources**.\n3. Choose `connect tiktok feed`.\n4. Complete the TikTok authorization flow if prompted.\n5. Get the MyBrandMetrics API key.\n6. Add the API key to `/root/.openclaw/workspace/config.json`:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n7. Install the `tiktok-publish` skill.\n8. Start publishing or checking TikTok publish status with this skill.\n\n## Workflow\n\nUse this workflow to post to TikTok, upload a TikTok video, publish a TikTok\nvideo, schedule TikTok posts, or check a TikTok publishing job.\n\n1. **Confirm the publishing goal.**\n   Choose whether to publish from a remote video URL, upload a local video\n   file, check an existing publish job, or prepare a scheduled posting\n   workflow.\n\n2. **Confirm the TikTok setup.**\n   Sign in to MyBrandMetrics with Google, connect TikTok as a data source, and\n   get a MyBrandMetrics API key.\n\n3. **Prepare credentials.**\n   Add the MyBrandMetrics API key to the workspace config:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n   Use the API key as an API key, not as a bearer token. Do not print real API\n   keys in chat, logs, examples, or terminal output.\n\n4. **Collect post details.**\n   Confirm the exact video source, post title, privacy level, and whether to\n   wait for the publishing job to finish.\n\n   Recommended defaults:\n\n   - use `SELF_ONLY` for tests;\n   - use `PUBLIC` only when the post is ready;\n   - keep titles concise and avoid excessive hashtags;\n   - use videos that are at least 3 seconds long.\n\n5. **Run the publishing command.**\n\n   Remote video URL:\n\n   ```bash\n   python3 scripts/publish_tiktok.py \\\n     --source \"https://example.com/video.mp4\" \\\n     --title \"My TikTok Title\" \\\n     --privacy-level \"SELF_ONLY\"\n   ```\n\n   Local video file:\n\n   ```bash\n   python3 scripts/publish_tiktok.py \\\n     --source \"/path/to/video.mp4\" \\\n     --title \"Launch clip\" \\\n     --privacy-level \"PUBLIC\" \\\n     --wait-for-published\n   ```\n\n6. **Review the response.**\n   Save the returned publish identifier if one is provided. If the response\n   says the post is pending, wait or check status later.\n\n7. **Check status when needed.**\n\n   ```bash\n   python3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n   ```\n\n8. **Confirm the result in TikTok.**\n   After the publishing job reports success, open the connected TikTok account\n   and confirm the post is live or ready for the next step.\n\n### Drafts, Carousels, And Scheduling\n\nThe current script supports video publishing from a remote URL or local file.\nFor image carousels, draft-mode publishing, or scheduled posting, first confirm\nthat the active MyBrandMetrics API and local script version support that\nworkflow.\n\nKnown workflow notes:\n\n- Draft-style flows may appear as a TikTok notification that the video is ready\n  to edit, rather than as a normal profile draft.\n- Image carousel publishing may require phone-friendly image dimensions such as\n  1080x1920. Oversized generated images can fail TikTok image checks.\n- Scheduled posting should be treated as an automation workflow: confirm the\n  sheet columns, publish date, publish time, video URL, title, privacy level,\n  and account before creating the task.\n\n### Common Errors\n\n| Error | Likely cause | Fix |\n| --- | --- | --- |\n| `401 invalid token format` | API key was sent in the wrong auth format or the key is invalid. | Use the MyBrandMetrics API key configuration supported by this skill. Do not use a bearer-token format. |\n| `picture_size_check_failed` | Image dimensions do not meet TikTok requirements. | Resize images to a phone-friendly format such as 1080x1920 and retry. |\n| `duration_check` | Video is too short. | Use a video that is at least 3 seconds long. |\n| `invalid_params` | Title, caption, media, or request parameters are invalid. | Simplify the title, reduce hashtags, and recheck the source URL or local path. |\n\n## Authentication\n\nTikTok authorization is handled through MyBrandMetrics.\n\n1. Sign in to MyBrandMetrics with Google.\n2. Connect TikTok as a data source.\n3. Make sure the TikTok connection is active before publishing.\n\nFor direct script usage, provide the MyBrandMetrics API key through\n`/root/.openclaw/workspace/config.json`:\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name. Environment\nvariables are supported for advanced setups, but `config.json` is the default\nsetup path.\n\nExample:\n\n```text\nPost this video to TikTok: https://example.com/video.mp4 with the caption \"Test\".\n```\n\nThe chat request should include:\n\n- the video URL or file reference;\n- the caption or title;\n- whether the post should be a test or public post;\n- whether to wait for publish completion.\n\nAfter the posting flow finishes, check the response and confirm the TikTok\nupload succeeded.\n\n## Use The Scripts Directly\n\nUse `scripts/publish_tiktok.py`.\n\nRemote URL:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\nLocal file:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Launch clip\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\nWith explicit polling controls:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Campaign preview\" \\\n  --privacy-level \"SELF_ONLY\" \\\n  --wait-for-published \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check Publish Status\n\nUse `scripts/check_status.py` when you already have a `publish_id`.\n\n```bash\npython3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n```\n\n## One-Time Scheduled Posting\n\nClawBus can also create a one-time scheduled TikTok posting task.\n\nPrepare:\n\n- videos or images uploaded to Google Drive or another reachable location;\n- a Google Sheet with post title, publish date, publish time, and video URL;\n- sharing access granted only to the trusted account or service that needs to\n  read the table.\n\nExample request:\n\n```text\nPlease help me create a one-time scheduled task. The task involves publishing videos or images to a TikTok account using the tiktok-publish skill, based on the title, date, time, and video URL data found in this table: GOOGLE_SHEET_URL\n```\n\nBefore scheduling, review every row in the sheet and confirm the account,\npublish time, title, and video URL. When the publishing task reports success,\nopen TikTok and confirm the post is live.\n\n## Parameters\n\n| Parameter | Required | Purpose |\n| --- | --- | --- |\n| `--source` | Yes | Direct video URL or local video file path. |\n| `--title` | Yes | TikTok post title. |\n| `--privacy-level` | No | `SELF_ONLY` by default; use `PUBLIC` only when ready to post live. |\n| `--wait-for-published` | No | Poll until the publish job completes. |\n| `--poll-interval` | No | Polling interval in milliseconds. |\n| `--poll-timeout` | No | Polling timeout in milliseconds. |\n| `--config` | No | Path to workspace `config.json`. |\n\nBefore publishing, confirm the TikTok account, video source, title or caption,\nand privacy setting. For test posts, use `SELF_ONLY` first.\n\nFile v1.1.11:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"tiktok-publish\",\n  \"version\": \"1.1.11\",\n  \"publishedAt\": 1779115642531\n}\n\nFile v1.1.11:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing scripts cannot find TikTok credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe scripts support these configuration sources:\n\n1. Environment variables:\n   - `TIKTOK_API_KEY`\n   - `TIKTOK_AUTHORIZATION_TOKEN`\n   - optional `TIKTOK_PUBLISHER_CONFIG`\n2. A workspace `config.json` file with a `tiktok` object\n\nEnvironment variables take precedence over values from `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens into the repository.\n- Prefer environment variables in shared environments.\n- Do not print secrets in terminal output or logs.\n\nFile v1.1.11:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish from a remote URL\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\n## Publish from a local file\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Hello from local file\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\n## Publish with explicit polling options\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Scheduled check\" \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check status\n\n```bash\npython3 scripts/check_status.py \\\n  --publish-id \"abc123\"\n```\n\nArchive v1.1.10: 6 files, 6979 bytes\n\nFiles: references/configuration.md (820b), references/publishing-examples.md (771b), scripts/check_status.py (1661b), scripts/publish_tiktok.py (3358b), SKILL.md (8992b), _meta.json (134b)\n\nFile v1.1.10:SKILL.md\n\n---\nname: TikTok Publisher\ndescription: >\n  Post to TikTok, upload TikTok videos, and publish TikTok video content\n  through the MyBrandMetrics API. Use for TikTok posting, uploading TikTok\n  videos, publishing TikTok videos, scheduling TikTok posts, or checking TikTok\n  publishing status. Supports local video files, remote video\n  URLs, post titles, privacy levels, publish status checks, chat-based posting,\n  and one-time scheduled posting tasks from a Google Sheet.\n---\n\n# TikTok Publisher\n\nPost to TikTok, upload TikTok videos, and publish TikTok video content through\nthe MyBrandMetrics API from a local file or a remote video URL.\n\nUse this skill to post to TikTok, upload TikTok videos, publish TikTok videos,\nschedule TikTok posts, check TikTok publishing status, or create a one-time\nscheduled TikTok posting task.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Remote URL publishing | Submit a direct `https://` video URL to TikTok through MyBrandMetrics. |\n| Local file publishing | Upload a local video file with multipart form data. |\n| Post metadata | Set the TikTok post title and privacy level. |\n| Chat-based posting | Use natural-language prompts in chat after the skill is installed. |\n| One-time scheduled tasks | Create a scheduled publishing task from a Google Sheet containing title, date, time, and video URL rows. |\n\n## Requirements\n\n- Access to MyBrandMetrics.\n- A MyBrandMetrics API key for TikTok publishing.\n- A video source, either a direct remote URL or a local file path.\n- A post title.\n- A privacy level, usually `SELF_ONLY` for testing or `PUBLIC` for live posting.\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics, open **Data sources**.\n3. Choose `connect tiktok feed`.\n4. Complete the TikTok authorization flow if prompted.\n5. Install the `tiktok-publish` skill.\n6. Start publishing or checking TikTok publish status with this skill.\n\n## Workflow\n\nUse this workflow to post to TikTok, upload a TikTok video, publish a TikTok\nvideo, schedule TikTok posts, or check a TikTok publishing job.\n\n1. **Confirm the publishing goal.**\n   Choose whether to publish from a remote video URL, upload a local video\n   file, check an existing publish job, or prepare a scheduled posting\n   workflow.\n\n2. **Confirm the TikTok setup.**\n   Sign in to MyBrandMetrics with Google, connect TikTok as a data source, and\n   get a MyBrandMetrics API key.\n\n3. **Prepare credentials.**\n   Use one of the supported configuration methods:\n\n   ```bash\n   export TIKTOK_API_KEY=\"YOUR_API_KEY\"\n   ```\n\n   or a workspace `config.json`:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n   Use the API key as an API key, not as a bearer token. Do not print real API\n   keys in chat, logs, examples, or terminal output.\n\n4. **Collect post details.**\n   Confirm the exact video source, post title, privacy level, and whether to\n   wait for the publishing job to finish.\n\n   Recommended defaults:\n\n   - use `SELF_ONLY` for tests;\n   - use `PUBLIC` only when the post is ready;\n   - keep titles concise and avoid excessive hashtags;\n   - use videos that are at least 3 seconds long.\n\n5. **Run the publishing command.**\n\n   Remote video URL:\n\n   ```bash\n   python3 scripts/publish_tiktok.py \\\n     --source \"https://example.com/video.mp4\" \\\n     --title \"My TikTok Title\" \\\n     --privacy-level \"SELF_ONLY\"\n   ```\n\n   Local video file:\n\n   ```bash\n   python3 scripts/publish_tiktok.py \\\n     --source \"/path/to/video.mp4\" \\\n     --title \"Launch clip\" \\\n     --privacy-level \"PUBLIC\" \\\n     --wait-for-published\n   ```\n\n6. **Review the response.**\n   Save the returned publish identifier if one is provided. If the response\n   says the post is pending, wait or check status later.\n\n7. **Check status when needed.**\n\n   ```bash\n   python3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n   ```\n\n8. **Confirm the result in TikTok.**\n   After the publishing job reports success, open the connected TikTok account\n   and confirm the post is live or ready for the next step.\n\n### Drafts, Carousels, And Scheduling\n\nThe current script supports video publishing from a remote URL or local file.\nFor image carousels, draft-mode publishing, or scheduled posting, first confirm\nthat the active MyBrandMetrics API and local script version support that\nworkflow.\n\nKnown workflow notes:\n\n- Draft-style flows may appear as a TikTok notification that the video is ready\n  to edit, rather than as a normal profile draft.\n- Image carousel publishing may require phone-friendly image dimensions such as\n  1080x1920. Oversized generated images can fail TikTok image checks.\n- Scheduled posting should be treated as an automation workflow: confirm the\n  sheet columns, publish date, publish time, video URL, title, privacy level,\n  and account before creating the task.\n\n### Common Errors\n\n| Error | Likely cause | Fix |\n| --- | --- | --- |\n| `401 invalid token format` | API key was sent in the wrong auth format or the key is invalid. | Use the MyBrandMetrics API key configuration supported by this skill. Do not use a bearer-token format. |\n| `picture_size_check_failed` | Image dimensions do not meet TikTok requirements. | Resize images to a phone-friendly format such as 1080x1920 and retry. |\n| `duration_check` | Video is too short. | Use a video that is at least 3 seconds long. |\n| `invalid_params` | Title, caption, media, or request parameters are invalid. | Simplify the title, reduce hashtags, and recheck the source URL or local path. |\n\n## Authentication\n\nTikTok authorization is handled through MyBrandMetrics.\n\n1. Sign in to MyBrandMetrics with Google.\n2. Connect TikTok as a data source.\n3. Make sure the TikTok connection is active before publishing.\n\nFor direct script usage, advanced users can provide a MyBrandMetrics API key\nthrough the workspace `config.json` file:\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name, and they\ncan read `TIKTOK_API_KEY` or `TIKTOK_AUTHORIZATION_TOKEN` from environment\nvariables.\n\nExample:\n\n```text\nPost this video to TikTok: https://example.com/video.mp4 with the caption \"Test\".\n```\n\nThe chat request should include:\n\n- the video URL or file reference;\n- the caption or title;\n- whether the post should be a test or public post;\n- whether to wait for publish completion.\n\nAfter the posting flow finishes, check the response and confirm the TikTok\nupload succeeded.\n\n## Use The Scripts Directly\n\nUse `scripts/publish_tiktok.py`.\n\nRemote URL:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\nLocal file:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Launch clip\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\nWith explicit polling controls:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Campaign preview\" \\\n  --privacy-level \"SELF_ONLY\" \\\n  --wait-for-published \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check Publish Status\n\nUse `scripts/check_status.py` when you already have a `publish_id`.\n\n```bash\npython3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n```\n\n## One-Time Scheduled Posting\n\nClawBus can also create a one-time scheduled TikTok posting task.\n\nPrepare:\n\n- videos or images uploaded to Google Drive or another reachable location;\n- a Google Sheet with post title, publish date, publish time, and video URL;\n- sharing access granted only to the trusted account or service that needs to\n  read the table.\n\nExample request:\n\n```text\nPlease help me create a one-time scheduled task. The task involves publishing videos or images to a TikTok account using the tiktok-publish skill, based on the title, date, time, and video URL data found in this table: GOOGLE_SHEET_URL\n```\n\nBefore scheduling, review every row in the sheet and confirm the account,\npublish time, title, and video URL. When the publishing task reports success,\nopen TikTok and confirm the post is live.\n\n## Parameters\n\n| Parameter | Required | Purpose |\n| --- | --- | --- |\n| `--source` | Yes | Direct video URL or local video file path. |\n| `--title` | Yes | TikTok post title. |\n| `--privacy-level` | No | `SELF_ONLY` by default; use `PUBLIC` only when ready to post live. |\n| `--wait-for-published` | No | Poll until the publish job completes. |\n| `--poll-interval` | No | Polling interval in milliseconds. |\n| `--poll-timeout` | No | Polling timeout in milliseconds. |\n| `--config` | No | Path to workspace `config.json`. |\n\nBefore publishing, confirm the TikTok account, video source, title or caption,\nand privacy setting. For test posts, use `SELF_ONLY` first.\n\nFile v1.1.10:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"tiktok-publish\",\n  \"version\": \"1.1.10\",\n  \"publishedAt\": 1779112943680\n}\n\nFile v1.1.10:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing scripts cannot find TikTok credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe scripts support these configuration sources:\n\n1. Environment variables:\n   - `TIKTOK_API_KEY`\n   - `TIKTOK_AUTHORIZATION_TOKEN`\n   - optional `TIKTOK_PUBLISHER_CONFIG`\n2. A workspace `config.json` file with a `tiktok` object\n\nEnvironment variables take precedence over values from `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens into the repository.\n- Prefer environment variables in shared environments.\n- Do not print secrets in terminal output or logs.\n\nFile v1.1.10:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish from a remote URL\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\n## Publish from a local file\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Hello from local file\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\n## Publish with explicit polling options\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Scheduled check\" \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check status\n\n```bash\npython3 scripts/check_status.py \\\n  --publish-id \"abc123\"\n```\n\nArchive v1.1.9: 6 files, 7022 bytes\n\nFiles: references/configuration.md (820b), references/publishing-examples.md (771b), scripts/check_status.py (1661b), scripts/publish_tiktok.py (3358b), SKILL.md (9174b), _meta.json (133b)\n\nFile v1.1.9:SKILL.md\n\n---\nname: TikTok Publisher\ndescription: >\n  Post to TikTok, upload TikTok videos, and publish TikTok video content\n  through the MyBrandMetrics API. Use when the user says TikTok, post to\n  TikTok, upload TikTok video, publish TikTok video, schedule TikTok posts, or\n  check TikTok publishing status. Supports local video files, remote video\n  URLs, post titles, privacy levels, publish status checks, chat-based posting,\n  and one-time scheduled posting tasks from a Google Sheet.\n---\n\n# TikTok Publisher\n\nPost to TikTok, upload TikTok videos, and publish TikTok video content through\nthe MyBrandMetrics API from a local file or a remote video URL.\n\nUse this skill when the user says TikTok, post to TikTok, upload TikTok video,\npublish TikTok video, schedule TikTok posts, check TikTok publishing status, or\ncreate a one-time scheduled TikTok posting task.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Remote URL publishing | Submit a direct `https://` video URL to TikTok through MyBrandMetrics. |\n| Local file publishing | Upload a local video file with multipart form data. |\n| Post metadata | Set the TikTok post title and privacy level. |\n| Chat-based posting | Use natural-language prompts in chat after the skill is installed. |\n| One-time scheduled tasks | Create a scheduled publishing task from a Google Sheet containing title, date, time, and video URL rows. |\n\n## Requirements\n\n- A Google account.\n- Access to MyBrandMetrics.\n- A MyBrandMetrics API key for TikTok publishing.\n- A video source, either a direct remote URL or a local file path.\n- A post title.\n- A privacy level, usually `SELF_ONLY` for testing or `PUBLIC` for live posting.\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics, open **Data sources**.\n3. Choose `connect tiktok feed`.\n4. Complete the TikTok authorization flow if prompted.\n5. Install the `tiktok-publish` skill.\n6. Start publishing or checking TikTok publish status with this skill.\n\n## Workflow\n\nUse this workflow when the user wants to post to TikTok, upload a TikTok video,\npublish a TikTok video, schedule TikTok posts, or check a TikTok publishing\njob.\n\n1. **Confirm the publishing goal.**\n   Ask whether the user wants to publish from a remote video URL, upload a\n   local video file, check an existing publish job, or prepare a scheduled\n   posting workflow.\n\n2. **Confirm the TikTok setup.**\n   Make sure the user has signed in to MyBrandMetrics with Google, connected\n   TikTok as a data source, and obtained a MyBrandMetrics API key.\n\n3. **Prepare credentials.**\n   Use one of the supported configuration methods:\n\n   ```bash\n   export TIKTOK_API_KEY=\"YOUR_API_KEY\"\n   ```\n\n   or a workspace `config.json`:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n   Use the API key as an API key, not as a bearer token. Do not print real API\n   keys in chat, logs, examples, or terminal output.\n\n4. **Collect post details.**\n   Confirm the exact video source, post title, privacy level, and whether the\n   user wants to wait for the publishing job to finish.\n\n   Recommended defaults:\n\n   - use `SELF_ONLY` for tests;\n   - use `PUBLIC` only after the user confirms the post is ready;\n   - keep titles concise and avoid excessive hashtags;\n   - use videos that are at least 3 seconds long.\n\n5. **Run the publishing command.**\n\n   Remote video URL:\n\n   ```bash\n   python3 scripts/publish_tiktok.py \\\n     --source \"https://example.com/video.mp4\" \\\n     --title \"My TikTok Title\" \\\n     --privacy-level \"SELF_ONLY\"\n   ```\n\n   Local video file:\n\n   ```bash\n   python3 scripts/publish_tiktok.py \\\n     --source \"/path/to/video.mp4\" \\\n     --title \"Launch clip\" \\\n     --privacy-level \"PUBLIC\" \\\n     --wait-for-published\n   ```\n\n6. **Review the response.**\n   Save the returned publish identifier if one is provided. If the response\n   says the post is pending, wait or check status later.\n\n7. **Check status when needed.**\n\n   ```bash\n   python3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n   ```\n\n8. **Confirm the result in TikTok.**\n   After the publishing job reports success, open the connected TikTok account\n   and confirm the post is live or ready for the next step.\n\n### Drafts, Carousels, And Scheduling\n\nThe current script supports video publishing from a remote URL or local file.\nIf the user asks for image carousels, draft-mode publishing, or scheduled\nposting, first confirm that the active MyBrandMetrics API and local script\nversion support that workflow.\n\nKnown workflow notes:\n\n- Draft-style flows may appear as a TikTok notification that the video is ready\n  to edit, rather than as a normal profile draft.\n- Image carousel publishing may require phone-friendly image dimensions such as\n  1080x1920. Oversized generated images can fail TikTok image checks.\n- Scheduled posting should be treated as an automation workflow: confirm the\n  sheet columns, publish date, publish time, video URL, title, privacy level,\n  and account before creating the task.\n\n### Common Errors\n\n| Error | Likely cause | Fix |\n| --- | --- | --- |\n| `401 invalid token format` | API key was sent in the wrong auth format or the key is invalid. | Use the MyBrandMetrics API key configuration supported by this skill. Do not use a bearer-token format. |\n| `picture_size_check_failed` | Image dimensions do not meet TikTok requirements. | Resize images to a phone-friendly format such as 1080x1920 and retry. |\n| `duration_check` | Video is too short. | Use a video that is at least 3 seconds long. |\n| `invalid_params` | Title, caption, media, or request parameters are invalid. | Simplify the title, reduce hashtags, and recheck the source URL or local path. |\n\n## Authentication\n\nTikTok authorization is handled through MyBrandMetrics.\n\n1. Sign in to MyBrandMetrics with Google.\n2. Connect TikTok as a data source.\n3. Make sure the TikTok connection is active before publishing.\n\nFor direct script usage, advanced users can provide a MyBrandMetrics API key\nthrough the workspace `config.json` file:\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name, and they\ncan read `TIKTOK_API_KEY` or `TIKTOK_AUTHORIZATION_TOKEN` from environment\nvariables.\n\nExample:\n\n```text\nPost this video to TikTok: https://example.com/video.mp4 with the caption \"Test\".\n```\n\nThe chat request should include:\n\n- the video URL or file reference;\n- the caption or title;\n- whether the post should be a test or public post;\n- whether the user wants to wait for publish completion.\n\nAfter the posting flow finishes, check the response and confirm the TikTok\nupload succeeded.\n\n## Use The Scripts Directly\n\nUse `scripts/publish_tiktok.py`.\n\nRemote URL:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\nLocal file:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Launch clip\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\nWith explicit polling controls:\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Campaign preview\" \\\n  --privacy-level \"SELF_ONLY\" \\\n  --wait-for-published \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check Publish Status\n\nUse `scripts/check_status.py` when you already have a `publish_id`.\n\n```bash\npython3 scripts/check_status.py --publish-id \"PUBLISH_ID\"\n```\n\n## One-Time Scheduled Posting\n\nClawBus can also create a one-time scheduled TikTok posting task.\n\nPrepare:\n\n- videos or images uploaded to Google Drive or another reachable location;\n- a Google Sheet with post title, publish date, publish time, and video URL;\n- sharing access granted only to the trusted account or service that needs to\n  read the table.\n\nExample request:\n\n```text\nPlease help me create a one-time scheduled task. The task involves publishing videos or images to a TikTok account using the tiktok-publish skill, based on the title, date, time, and video URL data found in this table: GOOGLE_SHEET_URL\n```\n\nBefore scheduling, review every row in the sheet and confirm the account,\npublish time, title, and video URL. When the publishing task reports success,\nopen TikTok and confirm the post is live.\n\n## Parameters\n\n| Parameter | Required | Purpose |\n| --- | --- | --- |\n| `--source` | Yes | Direct video URL or local video file path. |\n| `--title` | Yes | TikTok post title. |\n| `--privacy-level` | No | `SELF_ONLY` by default; use `PUBLIC` only when ready to post live. |\n| `--wait-for-published` | No | Poll until the publish job completes. |\n| `--poll-interval` | No | Polling interval in milliseconds. |\n| `--poll-timeout` | No | Polling timeout in milliseconds. |\n| `--config` | No | Path to workspace `config.json`. |\n\nBefore publishing, confirm the TikTok account, video source, title or caption,\nand privacy setting. For test posts, use `SELF_ONLY` first.\n\nFile v1.1.9:_meta.json\n\n{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"tiktok-publish\",\n  \"version\": \"1.1.9\",\n  \"publishedAt\": 1779111222609\n}\n\nFile v1.1.9:references/configuration.md\n\n# Configuration\n\nRead this file when the publishing scripts cannot find TikTok credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe scripts support these configuration sources:\n\n1. Environment variables:\n   - `TIKTOK_API_KEY`\n   - `TIKTOK_AUTHORIZATION_TOKEN`\n   - optional `TIKTOK_PUBLISHER_CONFIG`\n2. A workspace `config.json` file with a `tiktok` object\n\nEnvironment variables take precedence over values from `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens into the repository.\n- Prefer environment variables in shared environments.\n- Do not print secrets in terminal output or logs.\n\nFile v1.1.9:references/publishing-examples.md\n\n# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish from a remote URL\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\n## Publish from a local file\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Hello from local file\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\n## Publish with explicit polling options\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Scheduled check\" \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check status\n\n```bash\npython3 scripts/check_status.py \\\n  --publish-id \"abc123\"\n```","readmeExcerpt":"Skill: TikTok Publisher Owner: clawbus Summary: Post to TikTok, upload TikTok videos, and publish TikTok video content through the MyBrandMetrics API. Use for TikTok posting, uploading TikTok videos, publi... Tags: creator:1.1.18, latest:1.1.18, mybrandmetrics:1.1.18, no-mcp:1.1.18, publishing:1.1.18, social-media:1.1.18, tiktok:1.1.18, video:1.1.18 Version history: v1.1.18 | 2026-05-26T10:45:07.664Z | user Add compa","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }"},{"language":"json","snippet":"{\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }"},{"language":"bash","snippet":"python3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\""},{"language":"bash","snippet":"python3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Launch clip\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published"},{"language":"bash","snippet":"python3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Campaign preview\" \\\n  --privacy-level \"SELF_ONLY\" \\\n  --wait-for-published \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000"},{"language":"bash","snippet":"python3 scripts/check_status.py --publish-id \"PUBLISH_ID\""}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: TikTok Publisher\ndescription: >\n  Post to TikTok, upload TikTok videos, and publish TikTok video content\n  through the MyBrandMetrics API. Use for TikTok posting, uploading TikTok\n  videos, publishing TikTok videos, scheduling TikTok posts, or checking TikTok\n  publishing status. Supports local video files, remote video\n  URLs, post titles, privacy levels, publish status checks, chat-based posting,\n  and one-time scheduled posting tasks from a Google Sheet.\n---\n\n# TikTok Publisher\n\nPost to TikTok, upload TikTok videos, and publish TikTok video content through\nthe MyBrandMetrics API from a local file or a remote video URL.\n\nUse this skill to post to TikTok, upload TikTok videos, publish TikTok videos,\nschedule TikTok posts, check TikTok publishing status, or create a one-time\nscheduled TikTok posting task.\n\nWebsite: [https://www.clawbus.com/](https://www.clawbus.com/)  \nMyBrandMetrics API: [https://mybrandmetrics.com/](https://mybrandmetrics.com/)\n\n## Why This Is Better\n\nThis flow is simpler than a typical TikTok API or developer-app setup:\n\n- Sign in to MyBrandMetrics with Google instead of creating a TikTok developer\n  app.\n- No TikTok client ID, client secret, redirect URI, or callback server to\n  manage.\n- No manual token storage or refresh flow to build yourself.\n- No separate publish backend to run just to queue uploads and check status.\n- MyBrandMetrics handles the connection layer, while this skill focuses on\n  publishing, polling, and status checks.\n\n## Core Capabilities\n\n| Capability | Details |\n| --- | --- |\n| Remote URL publishing | Submit a direct `https://` video URL to TikTok through MyBrandMetrics. |\n| Local file publishing | Upload a local video file with multipart form data. |\n| Post metadata | Set the TikTok post title and privacy level. |\n| Chat-based posting | Use natural-language prompts in chat after the skill is installed. |\n| One-time scheduled tasks | Create a scheduled publishing task from a Google Sheet containing title, date, time, and video URL rows. |\n\n## Setup Flow\n\n1. Open [https://mybrandmetrics.com/](https://mybrandmetrics.com/) and sign in\n   with Google.\n2. In MyBrandMetrics, open **Data sources**.\n3. Choose `connect tiktok feed`.\n4. Complete the TikTok authorization flow if prompted.\n5. Get the MyBrandMetrics API key.\n6. Add the API key to `/root/.openclaw/workspace/config.json`:\n\n   ```json\n   {\n     \"tiktok\": {\n       \"api_key\": \"YOUR_API_KEY\"\n     }\n   }\n   ```\n\n7. Install the `tiktok-publish` skill.\n8. Start publishing or checking TikTok publish status with this skill.\n\n## Positioning Notes\n\n- Use this skill when the user wants TikTok publishing without building their\n  own TikTok developer integration.\n- Keep the message simple: one Google-based sign-in to MyBrandMetrics, one\n  connected TikTok feed, and the publish workflow is ready.\n- This is a publishing workflow, not a generic MCP or developer console setup.\n\n## Workflow\n\nUse this workflow to post to TikTok, upload a TikTok video, publish a "},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn713zgmx26jep6vrh0kbmmkw986a4xc\",\n  \"slug\": \"tiktok-publish\",\n  \"version\": \"1.1.18\",\n  \"publishedAt\": 1779792307664\n}"},{"path":"references/configuration.md","content":"# Configuration\n\nRead this file when the publishing scripts cannot find TikTok credentials or when\nyou need to prepare the workspace for publishing.\n\n## Supported config sources\n\nThe scripts support these configuration sources:\n\n1. Environment variables:\n   - `TIKTOK_API_KEY`\n   - `TIKTOK_AUTHORIZATION_TOKEN`\n   - optional `TIKTOK_PUBLISHER_CONFIG`\n2. A workspace `config.json` file with a `tiktok` object\n\nEnvironment variables take precedence over values from `config.json`.\n\n## Expected config.json shape\n\n```json\n{\n  \"tiktok\": {\n    \"api_key\": \"YOUR_API_KEY\"\n  }\n}\n```\n\nThe scripts also accept `authorization_token` as a fallback key name.\n\n## Security rules\n\n- Never commit real tokens into the repository.\n- Prefer environment variables in shared environments.\n- Do not print secrets in terminal output or logs."},{"path":"references/publishing-examples.md","content":"# Publishing Examples\n\nRead this file when you need a concrete invocation pattern.\n\n## Publish from a remote URL\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"My TikTok Title\" \\\n  --privacy-level \"SELF_ONLY\"\n```\n\n## Publish from a local file\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"/path/to/video.mp4\" \\\n  --title \"Hello from local file\" \\\n  --privacy-level \"PUBLIC\" \\\n  --wait-for-published\n```\n\n## Publish with explicit polling options\n\n```bash\npython3 scripts/publish_tiktok.py \\\n  --source \"https://example.com/video.mp4\" \\\n  --title \"Scheduled check\" \\\n  --poll-interval 5000 \\\n  --poll-timeout 300000\n```\n\n## Check status\n\n```bash\npython3 scripts/check_status.py \\\n  --publish-id \"abc123\"\n```"},{"path":"skill-card.md","content":"## Description:\n\nPost to TikTok, upload TikTok videos, and publish TikTok video content through the MyBrandMetrics API.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[clawbus](https://clawhub.ai/user/clawbus)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to publish TikTok videos from local files or remote URLs through MyBrandMetrics, check publish status, and prepare one-time scheduled posting workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can publish content publicly to TikTok through a connected account.\n\nMitigation: Confirm the TikTok account, source media, title, and privacy setting before publishing; use SELF_ONLY for test posts.\n\nRisk: The skill sends an API key and may upload local files or submit remote URLs to MyBrandMetrics.\n\nMitigation: Use environment variables in shared environments, avoid committing real tokens, and verify the exact local file path or URL before publishing.\n\nRisk: The documented Google Sheet scheduling workflow is not implemented by the included scripts.\n\nMitigation: Do not rely on scheduled posting unless the publisher supplies and explains the missing implementation.\n\n## Reference(s):\n\n- [Configuration](references/configuration.md)\n- [Publishing Examples](references/publishing-examples.md)\n- [ClawHub Skill Page](https://clawhub.ai/clawbus/skills/tiktok-publish)\n- [ClawBus](https://www.clawbus.com/)\n- [MyBrandMetrics](https://mybrandmetrics.com/)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, Configuration, API Calls, JSON]\n\n**Output Format:** [Markdown guidance with inline bash commands and JSON responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses a MyBrandMetrics API key and may upload local video files or submit remote video URLs for TikTok publishing.]\n\n## Skill Version(s):\n\n1.1.18 (source: server 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":1254,"uniquenessScore":44,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T10:37:16.999Z","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-10T10:37:16.999Z","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-10T13:32:28.704Z","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"}]}}}