---
sidebar:
  order: 1
title: HTTP API
description: >-
  Проходите аутентификацию, находите инструменты и подтверждайте изменения через существующий HTTP API.
---

Отправляйте запросы API продукта на доверенный адрес Influence, например `https://influence.so`. Домен документации не принимает запросы API продукта. Используйте точные пути ниже без параметров строки запроса.

## Создать ключ API с ограниченными правами [#create-a-scoped-api-key]

В [настройках Influence](https://influence.so/sign-in?next=%2Fapp%2Fsettings%2Faccount%23settings-developer) откройте «Приложения и автоматизации → Ключи API». Выберите нужные разрешения и срок действия. Сохраните ключ, который показывается только 1 раз, в хранилище секретов как `PUBLISH_API_TOKEN`. Передавайте его в `Authorization: Bearer …`; никогда не вставляйте в URL, тело запроса или чат. Отзовите ключ, когда он больше не нужен.

## Найти инструменты и получить список аккаунтов [#discover-tools-and-make-a-read]

Задайте для `PUBLISH_API_URL` доверенный адрес. В этих примерах предполагается, что процессу уже доступен `PUBLISH_API_TOKEN`. Для `accountList` нужно разрешение `integrations:read`; используйте его поля пагинации, чтобы получить следующие страницы.

```sh
export PUBLISH_API_URL="https://influence.so"
curl "$PUBLISH_API_URL/api/v1/tools" \
  -H "Authorization: Bearer $PUBLISH_API_TOKEN"

curl "$PUBLISH_API_URL/api/v1/tools/accountList/call" \
  -H "Authorization: Bearer $PUBLISH_API_TOKEN" \
  -H 'Content-Type: application/json' \
  --data '{"input":{}}'
```

## Пути запросов [#request-paths]

| Метод | Путь | Назначение |
| --- | --- | --- |
| `GET` | `/api/v1/tools` | Получить список инструментов, доступных этим учётным данным. |
| `POST` | `/api/v1/tools/{tool}/call` | Вызвать инструмент без подтверждения, включая продолжение уже разрешённых загрузок. |
| `POST` | `/api/v1/tools/{tool}/prepare` | Подготовить точное изменение без его выполнения. |
| `POST` | `/api/v1/tools/{tool}/confirm` | Подтвердить подготовленное изменение. |
| `POST` | `/api/v1/media/import` | Подтвердить подготовленную загрузку небольшого изображения в двоичном виде. |

Запросы инструментов в JSON используют `Content-Type: application/json` и тело, содержащее только `input`: `{"input":{…}}`. Получайте схему входных данных каждого инструмента из актуального каталога инструментов.

## Подготовить и подтвердить действия [#prepare-and-confirm-actions]

Используйте поле `confirmation` в каталоге: чтение обычно не требует подтверждения, но обновление аналитики требует его, хотя относится к чтению. Получение данных части загрузки, завершение и отмена продолжают уже разрешённую загрузку через `/call`.

1. Отправьте точные данные действия в `/prepare`. Успешный ответ содержит `status: "confirmation_required"`, `confirmationCapability`, `expiresAt`, `inputDigest` и необязательное поле `summary`.
2. До истечения срока отправьте те же входные данные в `/confirm`. Поместите полученное значение подтверждения в `X-Publish-Confirmation`, а новый ключ, созданный вызывающей стороной, — в `Idempotency-Key`.
3. Храните входные данные, значение подтверждения и ключ вместе. После прерванного подтверждения или ответа с неясным результатом повторно используйте все 3 значения для того же запроса. Не создавайте новую подготовку для восстановления после неясного результата.

Ключ идемпотентности содержит 16–200 символов из `A–Z`, `a–z`, `0–9`, `.`, `_`, `:` и `-`. Значения подтверждения — секреты с непрозрачным содержимым. Ключ, отправленный в `/call` или `/prepare`, не резервирует подтверждённое изменение.

Подтверждение на уровне протокола отдельно от одобрения публикации. Для публикации или изменения расписания покажите все актуальные материалы для проверки: аккаунты, текст, настройки, реальные превью медиа или ссылки на них, запланированное время и часовой пояс. Клиент может сообщить о новом явном одобрении человеком через `approval: "approved"` для подходящих проверок текстовых публикаций, изображений и видео в соцсетях; он не должен придумывать согласие или считать подготовку одобрением. Influence фиксирует это как одобрение, о котором сообщил клиент. Поддерживаемая встроенная карточка или проверка после входа в аккаунт фиксирует собственное действие человека.

TikTok Direct принимает явный выбор и согласие в чате через [процесс проверки](/ru/developers/mcp#prepare-finished-content). Сохраните все выбранные параметры через `campaignReview`, затем получите новое одобрение обновлённой проверки до выполнения. Карточка проверки необязательна. Обычное планирование через API/CLI не расходует лимит планирования с ИИ; отдельный [лимит MCP и Influence IQ](/ru/help/ai-assistants#scheduling-allowance) применяется к этим сценариям, даже если сохранённую проверку ИИ позже одобряют в Influence. Другие требования тарифа и платформы по-прежнему действуют. Прочитайте сохранённый результат перед дальнейшими действиями; `needs_review` требует выяснить результат, а не отправлять снова.

## Обрабатывать ошибки и неясные результаты [#handle-errors-and-uncertain-results]

Проверяйте и статус HTTP, и тело ответа. Успешные инструменты возвращают `{"ok":true,"toolName":"…","output":{…}}`. Ошибки инструментов возвращаются как `{"ok":false,"toolName":"…","error":{"code":"…","message":"…","retryable":false}}` и могут приходить со статусом HTTP 200. Ошибки протокола используют `{"error":{"code":"…","message":"…","retryable":false}}` без `ok` и `toolName`.

Статус 401 означает, что нужна аутентификация; проверьте срок действия и отзыв доступа. Отсутствующее разрешение нужно предоставить, а не повторять запросы. Статус 503 может означать, что сервис недоступен или другой запрос планирования обновляет рабочее пространство. Следуйте полученному коду ошибки и указаниям по повторной попытке; не повторяйте действие публикации автоматически. Тайм-аут не доказывает, что изменение не выполнено: сохраните данные подтверждения и прочитайте текущий статус перед повторной отправкой. Принято, запланировано и опубликовано — разные результаты.

## Загрузить медиа [#upload-media]

Для локальных файлов предпочитайте `uploadMedia` из SDK или `media:upload` из CLI. Они используют те же инструменты multipart-загрузки и сохраняют стабильный `clientKey` для повторных попыток. Прикреплять можно только готовый результат с `assetId`. Для разрешённой HTTPS-ссылки используйте `mediaImport` с `url` и необязательным `name`. Настоящие ссылки на файлы среды используют отдельный объект `file`; для публичного URL не нужен выдуманный ID файла среды. Локальный путь к файлу не является URL для скачивания. См. [ограничения медиа](/ru/help/media): импорт видео по HTTPS ограничен 250 МиБ, даже если более крупный готовый MP4 можно загрузить напрямую.

`POST /api/v1/media/import` поддерживает существующий способ передачи небольших изображений: подготовьте `mediaImport` с точным дескриптором загрузки, затем отправьте те же байты как `application/octet-stream`. Передайте `X-Publish-Confirmation`, `Idempotency-Key` и `X-Publish-Upload` с дескриптором JSON в кодировке URI. Байты должны совпадать с указанными размером и SHA-256. Для этого способа действует ограничение 3 МиБ; для более крупных поддерживаемых файлов используйте вспомогательный метод загрузки. Загрузка никогда не одобряет публикацию.

[Откройте справочник API](/ru/api-reference) или [скачайте спецификацию OpenAPI](/specs/influence.openapi.json).
