ZeolaiLog in

Zeolai API

Schedule and publish to Instagram, TikTok, YouTube, Facebook Pages and Telegram channels from your own scripts, automations or backend.

Media: you host the files

Zeolai is a scheduling service and does not store your files. Send media as public https:// links from wherever you keep them — your own server, S3, Cloudinary, Google Drive with a direct link, or anything else. The link must be reachable without a login at publishing time, because the social platform (or our server, when uploading on your behalf) downloads it then.

Authentication

Create a key in Settings → API keys. It's shown once. Send it as a bearer token:

curl https://zeolai.com/api/v1/me \
  -H "Authorization: Bearer zk_live_..."

List your connected accounts

Use the account id from here when creating posts.

GET https://zeolai.com/api/v1/accounts

{
  "accounts": [
    { "id": "665f…", "platform": "instagram", "username": "brand", "name": null, "status": "active" },
    { "id": "665g…", "platform": "tiktok",    "username": "brand", "name": null, "status": "active" },
    { "id": "665h…", "platform": "youtube",   "username": "brandtv", "name": "Brand TV", "status": "active" }
  ]
}

Schedule a post

POST https://zeolai.com/api/v1/posts
Content-Type: application/json

{
  "accountId": "665f…",
  "type": "REEL",
  "caption": "New drop \u2728 #sale",
  "media": [{ "url": "https://cdn.example.com/clip.mp4", "kind": "VIDEO" }],
  "scheduledAt": "2026-10-01T10:00:00Z"
}

Publish immediately instead of scheduling by adding "publishNow": true (then scheduledAt is ignored). Save a draft with "draft": true.

Post types per platform

  • Instagram — POST (1 JPEG), CAROUSEL (2–10), REEL (1 video), STORY (1 file)
  • TikTok — VIDEO (1 video)
  • YouTube — YT_VIDEO, YT_SHORT (1 video; Shorts up to 3 minutes)
  • Facebook Page — FB_POST (text and up to 10 photos), FB_VIDEO (1 video)
  • Telegram channel — TG_POST (text, one file, or an album of up to 10; add "silent": true to post without a notification)

Media kind is IMAGE (JPEG) or VIDEO (MP4/MOV), and media may be empty for text-only Telegram and Facebook posts. Captions are limited to 2200 characters on Instagram and TikTok, 4096 on Telegram, 5000 on YouTube and Facebook.

TikTok fields (required)

"tiktok": {
  "privacyLevel": "PUBLIC_TO_EVERYONE",   // or MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY
  "allowComment": true,
  "allowDuet": false,
  "allowStitch": false,
  "brandOrganic": false,                  // your own brand
  "brandContent": false,                  // paid partnership
  "isAigc": false
}

YouTube fields (required)

"youtube": {
  "title": "My video",                    // up to 100 characters
  "madeForKids": false,                   // must be set explicitly
  "privacyStatus": "public",              // or unlisted, private
  "tags": ["tag1", "tag2"],
  "categoryId": "22",
  "notifySubscribers": true,
  "containsSyntheticMedia": false
}

Other endpoints

  • GET https://zeolai.com/api/v1/posts?status=scheduled,published&limit=100 — list posts
  • GET https://zeolai.com/api/v1/posts/{id} — one post with its status, error and permalink
  • POST https://zeolai.com/api/v1/posts/{id}/publish — publish a scheduled post or draft now
  • DELETE https://zeolai.com/api/v1/posts/{id} — delete a post

Statuses

draft → scheduled → publishing → published or failed. A failed post carries the platform's message in error; a published one has permalink. Scheduled posts are published within about 30 minutes of the chosen time.

Errors

Errors come back as { "error": "…" } with status 400 (invalid input), 401 (bad key), 404, 409 (already publishing) or 500. Keep your key secret — it grants full access to your account's posting.