API Poster

v1

REST API для автопостинга: публикация постов и клипов, загрузка медиа, статистика и вебхуки для ВКонтакте, Одноклассников, Telegram и YouTube. Все ответы — в JSON.

Базовый URL

https://autoposter.digital/api/v1

API доступен на тарифе «Бизнес». Ключ создаётся в кабинете: Настройки → API.

Авторизация

Каждый запрос передаёт API-ключ воркспейса в заголовке. Поддерживаются два варианта — используйте любой:

Заголовок
x-api-key: ВАШ_КЛЮЧ
# либо
Authorization: Bearer ВАШ_КЛЮЧ

Без ключа или с неверным — 401 UNAUTHORIZED. Если тариф не «Бизнес» — 403 PLAN_LIMIT. Ключ даёт доступ ко всему воркспейсу — храните его как пароль и не публикуйте в клиентском коде.

Формат ответов

Единая обёртка. Успех — ok: true и data; ошибка — ok: false и error с машинным code.

Успех
{ "ok": true, "data": { ... } }
Ошибка
{ "ok": false, "error": { "code": "VALIDATION_ERROR", "message": "…", "details": [] } }
Коды состояния
200 / 201

Успех. 201 — создан ресурс (медиа, вебхук).

400 VALIDATION_ERROR

Неверные параметры (см. details).

401 UNAUTHORIZED

Нет ключа или он неверный.

402 NO_BALANCE

Недостаточно AI-баланса (при autogen).

403 PLAN_LIMIT

API доступен только на тарифе «Бизнес».

404 NOT_FOUND

Ресурс не найден или чужой.

429 RATE_LIMITED

Слишком часто — см. retryAfter.

Лимиты

На запись (создание/перенос/удаление постов, загрузка медиа) — порядка 30 запросов в минуту на воркспейс. При превышении — 429 с полем retryAfter (секунды). Для массовых действий используйте POST /posts/bulk (до 100 постов за раз), а не цикл одиночных запросов.

Аккаунты

GET/api/v1/accounts
Список подключённых каналов воркспейса. Их id нужны как accountIds при создании поста.
Запрос
curl https://autoposter.digital/api/v1/accounts \
  -H "x-api-key: ВАШ_КЛЮЧ"
Ответ
{ "ok": true, "data": [
  { "id": "acc_123", "platform": "VK", "displayName": "Мой паблик",
    "isActive": true, "followers": 2545 }
] }

Загрузка медиа

POST/api/v1/media
Возвращает presigned-ссылку для прямой заливки файла в хранилище. Порядок: (1) получить ссылку, (2) PUT-запросом загрузить сам файл, (3) передать mediaId в пост. Альтернатива — передать mediaUrls прямо в пост (мы скачаем сами).
Параметры тела (JSON)
filenamestringобязателен

Имя файла с расширением.

mimeTypestringобязателен

Например image/jpeg, video/mp4.

sizenumberобязателен

Размер в байтах (должен совпасть при заливке).

1. Получить ссылку
curl -X POST https://autoposter.digital/api/v1/media \
  -H "x-api-key: ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
  -d '{ "filename": "clip.mp4", "mimeType": "video/mp4", "size": 8482913 }'
Ответ
{ "ok": true, "data": {
  "mediaId": "med_abc", "uploadUrl": "https://…", "method": "PUT",
  "expiresInSec": 3600
} }
2. Залить файл
curl -X PUT "URL_ИЗ_ОТВЕТА" \
  -H "Content-Type: video/mp4" --data-binary @clip.mp4

Создание поста

POST/api/v1/posts
Публикует сразу (publishNow: true, по умолчанию) или ставит в расписание (scheduledAt). Текст можно задать общий (text) или свой на площадку (platformText). Медиа — через mediaIds или mediaUrls. Можно включить AI-генерацию текста (autogen).
Параметры тела (JSON)
accountIdsstring[]обязателен

Куда публиковать (1–50). Из GET /accounts.

textstring

Текст поста (до 10000). Либо platformText.

platformTextobject

Текст под площадку: { "VK": "…", "TELEGRAM": "…" }.

titlestring

Заголовок (для видео/YouTube).

hashtagsstring[]

До 30 тегов.

mediaIdsstring[]

ID из POST /media (до 10).

mediaUrlsstring[]

Прямые ссылки на медиа — скачаем сами (до 10).

asClipboolean

Публиковать видео как клип (VK Клипы, ОК, Shorts).

publishNowboolean

Опубликовать сразу. По умолчанию true.

scheduledAtstring (ISO)

Время публикации в будущем (если не publishNow).

idempotencyKeystring

Защита от дублей: повтор с тем же ключом вернёт тот же пост.

autogenobject

AI-генерация: { topic, title, caption, hashtags, model }. Тратит AI-баланс.

Запрос
curl -X POST https://autoposter.digital/api/v1/posts \
  -H "x-api-key: ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
  -d '{
    "accountIds": ["acc_123"],
    "text": "Привет из API!",
    "mediaIds": ["med_abc"],
    "asClip": true,
    "publishNow": true,
    "idempotencyKey": "my-unique-key-001"
  }'
Ответ
{ "ok": true, "data": {
  "id": "post_777", "status": "QUEUED", "scheduledAt": null,
  "mediaCount": 1,
  "accounts": [{ "id": "acc_123", "platform": "VK", "displayName": "Мой паблик" }]
} }

Список постов

GET/api/v1/posts
Посты воркспейса (последние сверху). Удобно для сверки статусов.
Запрос
curl "https://autoposter.digital/api/v1/posts" -H "x-api-key: ВАШ_КЛЮЧ"

Пост: получить / перенести / удалить

GET/api/v1/posts/{id}
Получить один пост со статусами площадок:
GET
curl https://autoposter.digital/api/v1/posts/post_777 -H "x-api-key: ВАШ_КЛЮЧ"
PATCH/api/v1/posts/{id}
Перенести запланированный пост (только будущее время):
PATCH
curl -X PATCH https://autoposter.digital/api/v1/posts/post_777 \
  -H "x-api-key: ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
  -d '{ "scheduledAt": "2026-08-01T10:00:00Z" }'
DELETE/api/v1/posts/{id}
Отменить/удалить пост (уже опубликованный удалить нельзя):
DELETE
curl -X DELETE https://autoposter.digital/api/v1/posts/post_777 -H "x-api-key: ВАШ_КЛЮЧ"

Массовые операции

POST/api/v1/posts/bulk
Отменить или перенести до 100 постов за один запрос.
Параметры тела (JSON)
action"cancel" | "reschedule"обязателен

Что сделать.

postIdsstring[]обязателен

ID постов (1–100).

scheduledAtstring (ISO)

Обязателен для reschedule (будущее время).

Запрос
curl -X POST https://autoposter.digital/api/v1/posts/bulk \
  -H "x-api-key: ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
  -d '{ "action": "cancel", "postIds": ["post_1", "post_2"] }'

Статистика

GET/api/v1/stats
Сводка по аккаунтам (подписчики и т.п.):
GET /stats
curl https://autoposter.digital/api/v1/stats -H "x-api-key: ВАШ_КЛЮЧ"
GET/api/v1/stats/{postId}
Статистика конкретного поста — итоги и разрез по площадкам:
Ответ
{ "ok": true, "data": {
  "postId": "post_777", "status": "PUBLISHED",
  "totals": { "likes": 42, "comments": 3, "reposts": 1, "views": 1980, "reach": 3120 },
  "platforms": [
    { "platform": "VK", "url": "https://vk.com/wall-…",
      "stats": { "likes": 42, "views": 1980, "reach": 3120, "fetchedAt": "…" } }
  ]
} }

Вебхуки

POST/api/v1/webhooks
Подпишитесь на события — мы будем слать POST на ваш URL. GET /webhooks вернёт ваши подписки и полный список событий.
События
POST_CREATED

Пост создан.

POST_PUBLISHED

Пост опубликован.

POST_FAILED

Публикация не удалась.

ACCOUNT_DISCONNECTED

Канал отвалился (нужно переподключить).

PAYMENT_SUCCESS

Успешная оплата.

PAYMENT_REFUNDED

Возврат средств.

Создать подписку
curl -X POST https://autoposter.digital/api/v1/webhooks \
  -H "x-api-key: ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
  -d '{ "url": "https://ваш-сервер/hook", "events": ["POST_PUBLISHED", "POST_FAILED"] }'
Удалить
curl -X DELETE https://autoposter.digital/api/v1/webhooks \
  -H "x-api-key: ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
  -d '{ "id": "wh_123" }'

Типичный сценарий: клип из API

  1. 1. GET /accounts — взять id нужных каналов.
  2. 2. POST /media — получить uploadUrl, затем PUT залить видео.
  3. 3. POST /posts с mediaIds, asClip: true и idempotencyKey.
  4. 4. (опц.) POST /webhooks на POST_PUBLISHED/POST_FAILED — узнать результат без опроса.
  5. 5. GET /stats/{postId} — собрать метрики позже.

Нужен ключ или помощь?

Ключ — в Настройках → API (тариф «Бизнес»). Вопросы — через кнопку «Помощь» в кабинете.