Особенности Instagram

Три вида постов

Вид поста castbase определяет по медиа, отдельно указывать его не нужно (в ответе он лежит в поле kind):

Что передали Вид Правила
одна картинка image — фото JPEG, PNG или WebP до 8 МБ
от 2 до 20 картинок carousel — карусель элементы публикуются в порядке media[]
одно видео reels — Reels MP4 или MOV, 3 секунды — 15 минут, до 300 МБ

Видео публикуется только как Reels: видео вместе с другими медиа — 422 video_not_reels. Больше 20 элементов в карусели — 422 too_many_items. Кадрирование карусели Instagram берёт по первому элементу (по умолчанию 1:1): подберите одинаковые пропорции у всех картинок.

Обложка Reels

Передайте картинку с role: "cover" вместе с видео (role: "item" или без роли):

{
  "channel_ids": ["01a1ab14-9628-798c-b1d0-77dbd5211c06"],
  "caption": "Новая коллекция #reels",
  "media": [
    {"media_id": "<id видео>", "role": "item"},
    {"media_id": "<id картинки>", "role": "cover"}
  ],
  "publish_at": "next_slot",
  "options": {"share_to_feed": true, "audio_name": "Оригинальный звук"}
}

Обложка допустима только у Reels и только одна картинка (cover_not_allowed, invalid_cover). Опции Reels: share_to_feed — показывать ли ролик и в ленте профиля, audio_name — название звука. Reels лучше снимать вертикально, 9:16.

Подпись

До 2200 символов и до 30 хэштегов; превышение — 422 с кодами too_long и too_many_hashtags ещё до постановки.

Ссылка в профиле

Instagram не делает ссылки в подписях кликабельными. Если нужен призыв перейти на сайт, принято писать «Ссылка в профиле» и держать актуальную ссылку в шапке аккаунта. castbase не добавляет такой призыв сам: подпись публикуется ровно так, как вы её передали. Добавляйте CTA в caption на своей стороне (например, строкой в конце: «Ссылка в профиле»).

Квота публикаций

Instagram разрешает ограниченное число публикаций аккаунта за скользящие 24 часа; точное число отдаёт сам Instagram (в документации Meta фигурируют 50 и 100, поэтому мы не зашиваем его в код, а спрашиваем у площадки перед каждой публикацией). Карусель считается за одну публикацию.

Что делает castbase: если квота исчерпана, цель переходит в deferred с error_code: quota_exhausted, приходит событие post.deferred, а публикация откладывается до освобождения окна. Блокировку аккаунта вы не получите, а пост выйдет сам. Если вы планируете много постов на один день, разложите их по времени (next_slot и сетка делают это за вас).

Токены и аккаунты

  • Только Professional-аккаунты (Business или Creator).
  • Токен действует 60 дней; castbase продлевает его сам. Нужно новый — канал получит статус reauth_required, в ленте появится channel.reauth_required.
  • Пока ваше Meta-приложение в режиме разработки, публикация возможна в аккаунты-тестеры приложения; для чужих аккаунтов понадобится App Review у Meta или платное подключение через приложение castbase.

Время отправки

За две минуты до publish_at castbase отправляет пост в Instagram: медиа в это время загружается и обрабатывается (видео может обрабатываться дольше), а сама публикация происходит в назначенное время. Незавершённый контейнер Instagram живёт 24 часа, поэтому публикация, которую не удалось выполнить за сутки от publish_at, помечается expired.