Publishing the same asset manually means repeated uploads, repeated captions, and repeated account switching. A centralized workflow removes most of that operational work while keeping platform-specific copy and final approval under your control.
What You Need
- A DOHOO account (3-day Blogger trial; API and MCP require Business or Agency)
- Your social accounts connected in Dashboard → Connections (each account receives a unique
connectionId) - A video or image file, or a direct HTTPS URL to one
Step 1 — Upload Your Media Once
The DOHOO MCP workflow stores your file in the media library and returns a reusable fileUrl you reuse for every platform.
Option A — the file is already online (fastest):
// upload_from_url — the server fetches the file, you never touch the bytes
{
"sourceUrl": "https://your-cdn.com/video.mp4",
"title": "Launch video",
"tags": ["launch", "2026"]
}
// → returns { "videoId": 812, "fileUrl": "https://mediastorage.dohoo.ai/file/..." }
Option B — local file (presigned upload):
- Request a presigned slot with
filenameandcontentType(e.g.video/mp4) → returnsuploadUrl,videoId,fileUrl PUTthe original bytes touploadUrlwith the sameContent-Typeheader — do not re-encode or compress; DOHOO processes media server-side- Poll upload status by
fileIduntil processing finishes
Step 2 — Publish to All 8 Platforms
Use the relevant DOHOO MCP publish tool for each destination with the same fileUrl. Destinations are submitted independently. They can share the same target time, but visible publication may differ slightly because each network processes the request separately.
| Platform | Caption limit | Notes |
|---|---|---|
| TikTok | 2,200 chars | Per-account visibility, Duet/Stitch/comment toggles |
| 2,200 chars | Up to 30 hashtags, 20 mentions; post / story / reels / reels_and_story | |
| Facebook Page | 63,206 chars | photo / video / reel / story / text-only |
| YouTube | Title 100, description 5,000 | Tags, category, custom thumbnail |
| X (Twitter) | 280 chars | Each URL counts as 23 characters |
| Threads | 500 chars | Text, photo, or video |
| 3,000 chars | Personal profile or company page (organizationId) |
|
| Title 100, description 800 | Destination link + alt text |
Pro tip: don't paste one identical caption everywhere. Reuse the core message, but trim to 280 for X, front-load the first ~125 characters on Instagram (that's what shows before "…more"), and write a keyword-rich 5,000-character description for YouTube.
Step 3 — Verify Every Post Actually Published
This is the step most tools skip. DOHOO exposes post status directly:
// list scheduled posts
{ "status": "all", "period": "today" }
// each post returns "pending", "published", or "failed" — failed posts include an errorMessage
DOHOO exposes pending, published, and failed scheduler states. Failed records include an error message that helps diagnose expired connections, rejected media, and platform limits.
No-Code Alternative
Prefer chat over code? DOHOO ships an MCP connector for Claude and ChatGPT: type "publish this video to all my accounts" and the AI runs the same upload → publish → verify flow. See Publish to Social Media with Claude.
FAQ
Can I post to all 8 platforms with different captions?
Yes. Each platform call accepts its own text, so you stay within native limits and can localize per audience.
Do posts publish at exactly the same time?
They can be submitted for the same target time, but each platform processes its post independently, so the visible time may differ slightly.
What video format should I use?
A clean vertical H.264 MP4 is a practical common source, provided it also meets each destination’s duration, size, and placement requirements. Upload the original file; DOHOO handles supported server-side processing.
How do I know if a post failed?
Check post status: failed posts carry an errorMessage with the platform or processing error returned for troubleshooting.