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 uploadpublish_at→ native YouTube scheduling: the video uploads now, staysprivate, 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.