Разработка и API 7 мин чтения

Справочник JSON-объектов

Описание всех полей: Post, PostVersion, PublishRecord, Engagement, Media, Error

Справочник JSON-объектов, возвращаемых REST API и Webhook.

Post (пост)

Базовый объект поста в списках (GET /campaigns/{id}/posts/) и Webhook.

  • task_id (integer) - уникальный ID задачи
  • campaign_id (integer) - ID кампании
  • campaign_name (string) - название кампании
  • text (string) - текст поста (активная версия)
  • status (string) - SCHEDULED, GENERATING, WAITING_APPROVAL, APPROVED, PUBLISHING, PUBLISHED, PARTIALLY_PUBLISHED, READY, CANCELED, FAILED
  • post_type (string) - IMAGE, ALBUM, VIDEO, DOCUMENT, TEXT
  • published_at (string | null, ISO 8601) - запланированное время публикации
  • created_at (string, ISO 8601) - время создания задачи
  • updated_at (string | null, ISO 8601) - последнее обновление
  • media (object | null) - медиа-вложения, см. ниже

PostDetail (полные данные поста)

Расширенный объект через GET /posts/{id}/. Включает все базовые поля и дополнительно:

  • generate_at (string | null, ISO 8601) - когда была запущена генерация
  • versions (array of PostVersion) - история версий текста
  • publish_records (array of PublishRecord) - статус публикации по каналам
  • engagement (object) - метрики вовлечённости

PostVersion (версия текста)

Каждая регенерация или ручная правка создаёт новую версию. Максимум 10 версий на пост.

  • version_number (integer) - порядковый номер (начиная с 1)
  • text_content (string) - текст этой версии
  • source (string) - INITIAL (первичная генерация), REGENERATION (ИИ-перегенерация), MANUAL_EDIT (ручная правка)
  • is_active (boolean) - активная версия, которая будет опубликована
  • created_at (string, ISO 8601) - время создания версии

PublishRecord (запись публикации)

Отдельная запись для каждого канала, в который публикуется пост.

  • channel_name (string) - название канала
  • platform (string) - TELEGRAM, VK, MAX, WEBHOOK
  • status (string) - PENDING, PUBLISHED, FAILED
  • published_at (string | null, ISO 8601) - фактическое время публикации
  • platform_message_id (string | null) - ID сообщения на платформе

Engagement (метрики вовлечённости)

В PostDetail метрики представлены как объект с ключами по типу метрики:

{{
  "VIEWS": {{"value": 1500, "delta": 200, "updated_at": "2026-04-06T12:00:00+05:00"}},
  "LIKES": {{"value": 45, "delta": 5, "updated_at": "2026-04-06T12:00:00+05:00"}}
}}

В эндпоинте GET /posts/{id}/engagement/ - как массив:

  • metric_type (string) - VIEWS, LIKES, COMMENTS, REPOSTS, REACTIONS
  • platform (string) - платформа (TELEGRAM, VK и т.д.)
  • value (integer) - текущее значение метрики
  • previous_value (integer) - значение на предыдущем сборе
  • delta (integer) - изменение с предыдущего сбора
  • updated_at (string, ISO 8601) - время последнего обновления

Media (медиа-вложения)

Ссылки на файлы временные - действуют expires_in секунд (по умолчанию 24 часа). Скачайте файлы на свой сервер до истечения срока.
  • post_type (string) - IMAGE, ALBUM, VIDEO, DOCUMENT, TEXT
  • images (array) - массив изображений
  • images[].url (string) - временная ссылка на изображение
  • images[].is_selected (boolean) - выбрано для публикации
  • images[].in_album (boolean) - входит в альбом
  • images[].source (string) - ai_generated (сгенерировано ИИ) или user_uploaded (загружено пользователем)
  • video (object | null) - видео (только для post_type=VIDEO)
  • video.url (string) - временная ссылка на видео
  • video.filename (string) - имя файла
  • video.file_size (integer) - размер в байтах
  • documents (array) - документы (PDF, DOCX и др.)
  • documents[].url (string) - временная ссылка
  • documents[].filename (string) - имя файла
  • documents[].file_size (integer) - размер в байтах
  • expires_in (integer) - время жизни всех URL в секундах (по умолчанию 86400 = 24 часа)

Примеры media по типам поста

IMAGE - один снимок

{{
  "post_type": "IMAGE",
  "images": [
    {{"url": "https://cdn.example.com/img_a1b2c3.png?token=...", "is_selected": true, "in_album": false, "source": "ai_generated"}}
  ],
  "video": null,
  "documents": [],
  "expires_in": 86400
}}

ALBUM - несколько фото

{{
  "post_type": "ALBUM",
  "images": [
    {{"url": "https://cdn.example.com/photo1.jpg?token=...", "is_selected": false, "in_album": true, "source": "user_uploaded"}},
    {{"url": "https://cdn.example.com/photo2.jpg?token=...", "is_selected": false, "in_album": true, "source": "user_uploaded"}},
    {{"url": "https://cdn.example.com/photo3.jpg?token=...", "is_selected": true, "in_album": true, "source": "ai_generated"}}
  ],
  "video": null,
  "documents": [],
  "expires_in": 86400
}}

VIDEO - видео с обложкой

{{
  "post_type": "VIDEO",
  "images": [
    {{"url": "https://cdn.example.com/thumb.png?token=...", "is_selected": true, "in_album": false, "source": "ai_generated"}}
  ],
  "video": {{
    "url": "https://cdn.example.com/video.mp4?token=...",
    "filename": "presentation.mp4",
    "file_size": 15728640
  }},
  "documents": [],
  "expires_in": 86400
}}

DOCUMENT - документы

{{
  "post_type": "DOCUMENT",
  "images": [
    {{"url": "https://cdn.example.com/cover.png?token=...", "is_selected": true, "in_album": false, "source": "user_uploaded"}}
  ],
  "video": null,
  "documents": [
    {{"url": "https://cdn.example.com/report.pdf?token=...", "filename": "report.pdf", "file_size": 2097152}},
    {{"url": "https://cdn.example.com/slides.pptx?token=...", "filename": "slides.pptx", "file_size": 5242880}}
  ],
  "expires_in": 86400
}}

TEXT - только текст

{{
  "post_type": "TEXT",
  "images": [],
  "video": null,
  "documents": [],
  "expires_in": 86400
}}

ApprovalResult (результат одобрения/отмены)

Возвращается эндпоинтами POST /posts/{id}/approve и POST /posts/{id}/reject.

  • task_id (integer) - ID задачи
  • status (string) - новый статус задачи
  • result (string) - код результата: approved_now, already_approved, already_published, already_canceled, rejected_now, not_pending
  • message (string) - описание результата на русском

Error (ошибка)

Объект ошибки при неудачном запросе:

{{
  "error": {{
    "code": "not_found",
    "message": "Кампания не найдена."
  }}
}}

Коды ошибок:

  • feature_unavailable - Developer API недоступен на тарифе (403)
  • subscription_inactive - подписка не активна (403)
  • not_found - ресурс не найден (404)
  • no_posts - нет постов (404)
  • conflict - невозможно выполнить операцию в текущем статусе (409)
  • validation_error - ошибка валидации параметров (400)