With a single Zernio publishing API, post and schedule organic posts across multiple platforms. The execution layer of content calendar automation. (API facts verified: 2026-07)
Publishing Gate (MANDATORY)
The agent's ceiling is "scheduling under user approval." "Make it/write it" is not publishing approval — "post it/schedule it" is approval, and per destination (platform) is obtained. The automation loop (calendar) also gets the entire calendar approved at initial setup, and again when content changes.
Setup
- Account: sign up at zernio.com → Dashboard → Accounts → connect each platform. Instagram can only publish via API with a Business/Creator account (personal accounts must be switched in the IG app: Settings → Account type and tools → Switch to professional account).
- 키: env
ZERNIO_API_KEY. Basehttps://zernio.com/api/v1,Authorization: Bearer. - VERIFY:
GET /v1/profiles200 +GET /v1/accountsthe target platform accountId. - Windows: all calls Python urllib + utf-8 (curl+cp1252 crashes on emoji responses — it was the cause of an actual duplicate posting incident).
A. Media upload (presign)
POST /media/presign { "filename": "...", "contentType": "video/mp4" }
→ { uploadUrl, publicUrl }
→ PUT 바이트를 uploadUrl로 (긴 영상은 timeout ≥ 1800s)
→ publicUrl을 mediaItems에 사용
B. Create post (immediate / scheduled)
POST /posts
{ "content": "캡션...",
"mediaItems": [{ "url": "https://...", "thumbnail": "https://..." }],
"platforms": ["instagram", "youtube"],
"scheduledFor": "2026-07-20T09:00:00Z", "timezone": "Asia/Seoul" }
// 또는 "publishNow": true
- One post targets multiple platforms simultaneously — they go out together at the same time.
- Response
post.status∈ scheduled|published|draft|pending — ASSERT the expected value. If you expected scheduled but it's published, it's already live — report to the user immediately. - YouTube
platformSpecificData:{title(≤100), visibility, madeForKids}; custom thumbnail ismediaItems[].thumbnail(<2MB, ≥640px, regular videos only — Shorts are not possible; vertical videos ≤3 min are automatically classified as Shorts). - Instagram:
{contentType: "reels", shareToFeed: true}; Reels 9:16, 3–90s, ≤300MB, H.264. The Reels cover is before publishing — it cannot be changed via API after publishing. - IG posts 1–3 minutes later than YouTube — this is normal, not a failure.
C. Edit · Publish immediately · Verify
- Reschedule/edit:
PUT /posts/{id}(PATCH는 405). - "Post it now": via PUT
scheduledFor= now+2 min (past times may be rejected) → GET polling at 30-second intervals → all platformspublishedverify → report platformPostUrl. - Timeout ≠ failure: large POSTs may have succeeded on the server even after a client timeout. If unclear,
GET /v1/posts?limit=10find my content first, and retry only when it's truly absent. Blind retry = duplicate posting.
D. Automation patterns (calendar)
- Cadence defaults: Shorts/Reels once a day, at a fixed local prime-time hour. First publish starts with representative content (the one matching the thumbnail claim).
- Batch schedule: N pieces of content → get the approved calendar (date×platform table) confirmed by the user
→ create per post → after creation,
GET /postsre-fetch the entire schedule and report it as a table. - Repurpose linkage: for cross-platform conversion, rewrite with the content-repurpose skill and then publish with this skill. For paid boost, use paid-ads.
- Publishing copy standards: no clickbait titles, no emoji walls, match hashtags to platform conventions (self-check: humanizer skill).
If there's no Zernio (manual fallback)
Guide them through uploading to YouTube Studio + scheduling with Meta Business Suite, and prepare the title/description/caption/ hashtags all as copy-paste-ready files.