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": trueto 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 postsGET https://zeolai.com/api/v1/posts/{id}— one post with its status, error and permalinkPOST https://zeolai.com/api/v1/posts/{id}/publish— publish a scheduled post or draft nowDELETE 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.