Перейти до змісту

Кроспостинг одного файлу

Найпоширеніша задача: одне готове відео, кожна мережа, правильний текст і налаштування для кожної. Один POST /posts із кількома цілями робить це — сервер розгортає запит в один пост на акаунт, застосовує власні поля мережі з perPlatform і власний текст мережі з overrides та перевіряє кожен проти лімітів цієї мережі в плані.

  • Платний тариф і ключ API зі write.
  • По одному підключеному акаунту на кожну потрібну мережу; id з GET /accounts. TikTok приєднається до списку, коли вийде його коннектор.
  • Вертикальне відео (9:16), якщо серед цілей Instagram Reels або Facebook Reels — горизонтальне відео покажеться там зі смугами, що план позначає як попередження, а не відмову.
  1. GET /accounts → чотири id акаунтів.
  2. Завантажити файл один раз → mediaId.
  3. Один POST /posts/plan з усіма чотирма цілями, overrides і perPlatform.
  4. Прочитати чотири рядки; виправити будь-який ok: false; POST /posts із confirm: true.
  5. GET /posts/{id} для кожного повернутого поста, доки не live або failed.
Terminal window
export KEY="ds_live_xxxxxxxxxxxxxxxxxxxx"
export API="https://api.dropslate.top/v1"
AUTH="Authorization: Bearer $KEY"
# 1) Account ids by network - never typed by hand
ACCOUNTS=$(curl -s "$API/accounts" -H "$AUTH")
ID_YT=$(echo "$ACCOUNTS" | jq -r '.accounts[] | select(.platform=="youtube") | .id')
ID_IG=$(echo "$ACCOUNTS" | jq -r '.accounts[] | select(.platform=="instagram") | .id')
ID_FB=$(echo "$ACCOUNTS" | jq -r '.accounts[] | select(.platform=="facebook") | .id')
ID_TH=$(echo "$ACCOUNTS" | jq -r '.accounts[] | select(.platform=="threads") | .id')
# 2) Upload once (see the weekly recipe for the upload function)
MEDIA_ID=$(upload ./launch.mp4)
# 3) One body for every network
cat > body.json <<EOF
{
"targets": { "accountIds": ["$ID_YT", "$ID_IG", "$ID_FB", "$ID_TH"] },
"mediaIds": ["$MEDIA_ID"],
"title": "How we schedule a week of posts in ten minutes",
"text": "Full description with timestamps.\n0:00 Intro\n1:20 Upload\n3:05 Plan and confirm",
"tags": ["scheduling", "dropslate"],
"when": { "publishAt": "2026-09-29T18:00", "timezone": "Europe/Kiev" },
"overrides": {
"threads": { "text": "A week of posts in ten minutes. New video." },
"facebook": { "text": "New video: a week of posts in ten minutes." }
},
"perPlatform": {
"youtube": { "visibility": "public", "category": "27", "notifySubscribers": true },
"instagram": { "contentType": "reel", "coverMs": 2500, "shareToFeed": true },
"facebook": { "contentType": "reel" },
"threads": { "topicTag": "Scheduling" }
}
}
EOF
curl -s -X POST "$API/posts/plan" -H "$AUTH" -H "Content-Type: application/json" -d @body.json | jq -r .table

План друкує по рядку на акаунт:

account network time check
What We Made youtube 29 Sep, 18:00 (Kyiv) ok
@whatwemade instagram 29 Sep, 18:00 (Kyiv) ok
What We Made Page facebook 29 Sep, 18:00 (Kyiv) ok
@whatwemade threads 29 Sep, 18:00 (Kyiv) ok

Кожен рядок ok? Створюйте:

Terminal window
jq '. + {confirm:true}' body.json | curl -s -X POST "$API/posts" -H "$AUTH" -H "Content-Type: application/json" -d @- | jq -r '.posts[] | "\(.id) \(.statusLine)"'

Опитуйте кожен id, доки він не вийде з queued:

Terminal window
curl -s "$API/posts/$POST_ID" -H "$AUTH" | jq '{status, externalUrl, error}'

live пости несуть externalUrl; failed несе error.code, error.message (слова мережі) і error.hint.

  • Лише текст у Facebook і Threads поруч із відео деінде — це два запити: mediaIds стосується кожної цілі в одному запиті.
  • Група замість id. "targets":{"groupId":"grp_…"} — те саме розгортання, на рядок коротше.
  • Різний час на мережу. В одному запиті один when; надсилайте по запиту на час.
  • Через MCP. Скажіть Claude, чого хочете; він виконає ті самі виклики й покаже ту саму таблицю до того, як щось створити — Сценарії.