How-to Guide

How to Schedule Social Media Posts with DOHOO MCP

Quick Answer: Send a schedule request to DOHOO with a fileUrl, a scheduledAt timestamp in local wall-clock time, and an IANA timezone (e.g. "America/New_York"). The post stays pending until that exact local moment, then publishes automatically. You can list, verify, and audit every scheduled post — including failures with their exact error message.

Hard-coding UTC offsets is how scheduled posts end up publishing at 3 AM for your audience. DOHOO's scheduler is timezone-native by design.

How DOHOO Scheduling Works

Every schedule call takes two required time parameters:

{
  "scheduledAt": "2026-07-15T19:00:00",   // local wall-clock, ISO 8601, NO "Z"
  "timezone": "America/New_York"          // IANA timezone — required
}

scheduledAt is interpreted in the timezone you pass, not in UTC. Targeting a US audience from Europe? Pass America/New_York and "19:00" means 7 PM Eastern — daylight saving handled automatically. This one design choice eliminates the most common scheduling bug in social automation.

Step 1 — Upload Media

Get a reusable fileUrl via URL import or presigned upload (see Post to Multiple Platforms at Once).

Step 2 — Schedule Per Platform

DOHOO MCP exposes a dedicated schedule tool for each supported platform, with platform-native parameters:

// Schedule a TikTok video
{
  "fileUrl": "https://mediastorage.dohoo.ai/file/...",
  "platforms": [2477],
  "description": "How we cut posting time by 90% #automation",
  "tiktokVisibility": { "2477": "PUBLIC_TO_EVERYONE" },
  "scheduledAt": "2026-07-15T19:00:00",
  "timezone": "America/New_York"
}
// Schedule an Instagram Reel
{
  "fileUrl": "https://mediastorage.dohoo.ai/file/...",
  "instagramAccountId": "812",
  "contentType": "reels",
  "caption": "The 10-minute publishing workflow 👇",
  "scheduledAt": "2026-07-15T19:00:00",
  "timezone": "America/New_York"
}

YouTube has two scheduling modes — don't mix them:

  • scheduledAt + timezone → DOHOO's scheduler defers the entire upload
  • publish_at → native YouTube scheduling: the video uploads now, stays private, and goes public at the set time (useful for Premieres-style launches)

Step 3 — Verify and Monitor

Never assume a scheduling tool call succeeded — read the scheduled-post record back:

// List pending posts for the coming week
{ "status": "pending", "period": "week", "platform": "instagram" }

// Audit what actually happened last week
{ "status": "all", "period": "custom", "from": "2026-07-01", "to": "2026-07-08" }

Statuses are pending, published, or failed — and failed posts include an errorMessage (expired token, rejected media, API limit). DOHOO returns the scheduler state and the error message available for failed records.

Batch Scheduling Pattern

Content calendar for a week = a loop:

import datetime
slots = [datetime.datetime(2026, 7, 14 + d, 19, 0) for d in range(7)]
for video, slot in zip(videos, slots):
    schedule(fileUrl=video, scheduledAt=slot.isoformat(), timezone="America/New_York")

At larger volumes, respect the scheduled-post queue in your plan and the rolling publishing caps enforced by each social network.

FAQ

Which timezone format do I use?

IANA names only: Europe/Kiev, America/New_York, Asia/Tokyo. Never numeric offsets — IANA handles daylight saving for you.

Can I schedule to multiple platforms at the same moment?

Yes. Fire one schedule call per platform with identical scheduledAt + timezone; all posts receive the same target time, while platform processing may create small differences in visible publication time.

How do I check whether a scheduled post failed?

Query posts with status: "failed" — each result carries the exact errorMessage.

Is there a limit on how far ahead I can schedule?

scheduledAt must simply be in the future; week-long and month-long calendars are standard usage.

Publish to all 8 platforms in one step — no silent failures.

View DOHOO plans