Публикации и комментарии
Ответить на комментарий верхнего уровня
Только подтверждённые комментарии верхнего уровня собственных публикаций TikTok; другие провайдеры и подтверждённые вложенные цели дают 501 unsupported_by_provider. Полная проверка может дать 404 post_not_found (39000) или comment_not_found (39001); последнее не означает поиск всех ответов. 403 post_inaccessible (39005) не указывает причину или отсутствие; незавершённая проверка останавливает запись. accepted не гарантирует показ, доставку или Webhook. Неподтверждённый результат после записи даёт 502 reply_post_comment_failed (39004), исход неизвестен; не отправляйте повторно автоматически. Отсутствие ответа при последующем чтении не доказывает, что он не был создан.
https://api.unifyport.ai/v1/accounts/{account_id}/posts/comments/replyПоддерживаемые каналы
Перед вызовом
Используйте X-Api-Key нужного рабочего пространства на сервере. Перед запуском замените все заполнители.
Откуда взять параметры
- account_id
- Возьмите data.id из создания или запроса аккаунта. Идентификатор относится к рабочему пространству X-Api-Key. Получить аккаунт
Параметры запроса
Заголовки
X-Api-KeyAPI-ключ рабочей области. Рабочая область определяется по этому заголовку.
Content-TypeИспользуйте application/json при отправке JSON-тела запроса.
Параметры пути
account_idИдентификатор для маршрута раздела accounts.
Тело запроса
post_idID публикации провайдера, передаваемый строкой без изменений. TikTok требует строку положительного десятичного целого без ведущих нулей; иначе 400 provider_invalid_request.
minLength: 1 · pattern: \S
comment_idID подтверждённого комментария верхнего уровня у провайдера; передавайте непустую строку не из одних пробелов без изменений, не преобразуйте в число.
minLength: 1 · pattern: \S
textТекст ответа должен содержать непробельный символ; сохраняется дословно, включая пробелы по краям.
minLength: 1 · pattern: \S
Как понять результат
accepted подтверждает только приём, без гарантии отображения, доставки или Webhook. После записи ответ 502 reply_post_comment_failed может означать неизвестный результат; не отправляйте повторно автоматически. Отсутствие ответа при последующем чтении не доказывает, что он не был создан.
Ответ 200 OK
{
"request_id": "<REQUEST_ID>",
"data": {
"status": "accepted"
}
}
Тело ответа
statusaccepted означает только принятие, не гарантирует показ, доставку или Webhook.
enum: accepted
commentobjectДобавляется только при достоверном подтверждении нового комментария; наличие не гарантируется.
commentДобавляется только при достоверном подтверждении нового комментария; наличие не гарантируется.
idИдентификатор провайдера; сохраняйте непустую строку не из одних пробелов без изменений, не преобразуйте в число.
minLength: 1 · pattern: \S
post_idИдентификатор провайдера; сохраняйте непустую строку не из одних пробелов без изменений, не преобразуйте в число.
minLength: 1 · pattern: \S
textДостоверно полученный исходный текст, включая пустую строку; опускается, если неизвестен.
authorobjectИнформация об авторе, если доступна.
authorИнформация об авторе, если доступна.
idИдентификатор провайдера; сохраняйте непустую строку не из одних пробелов без изменений, не преобразуйте в число.
minLength: 1 · pattern: \S
display_nameДостоверно полученный исходный текст, включая пустую строку; опускается, если неизвестен.
avatar_urlДостоверно полученный непустой URL аватара; опускается, если неизвестен.
minLength: 1
created_atДостоверное время создания комментария в RFC3339 UTC; опускается, если неизвестно, и не заменяется временем наблюдения.
format: date-time
parent_comment_idПередаётся только при подтверждённой связи с родителем. Отсутствие не доказывает, что это комментарий верхнего уровня, на который можно ответить.
minLength: 1 · pattern: \S
Ответы
200200 OK
Запрос выполнен. См. пример тела ответа.
400Bad Request
Тело запроса, путь или параметры некорректны.
401Unauthorized
Заголовок X-Api-Key отсутствует или недействителен.
403Forbidden
Запрос распознан, но операция запрещена.
404Not Found
Запрошенный ресурс не найден. Сверьте error.code с текущей операцией.
409Conflict
Запрошенная операция конфликтует с существующим аккаунтом провайдера или ресурсом.
501Not Implemented
Выбранный провайдер не реализует эту операцию.
502Bad Gateway
Адаптер или вышестоящий провайдер не смог завершить операцию.
При ошибке запроса
Проверьте пост, подтверждённый комментарий верхнего уровня и классификацию ошибки. При неизвестном результате записи сохраните request_id и выясните результат до повтора. Отсутствия ответа в последующем чтении недостаточно для повторной записи. Справочник ошибок
Сопоставляйте HTTP-статус, error.code и error.numeric_code с текущей операцией. Числовой код — строка. Сохраняйте request_id для диагностики: это не ключ идемпотентности и не идентификатор задачи.
- invalid_request · 10000 · 400
Проверьте JSON и обязательные поля.
Действия и повторы: Исправьте параметры с учётом операции и канала. Повтор неизменённого неверного запроса не устранит ошибку.
Пример JSON; message зависит от фактической причины · 400 · 10000
{ "request_id": "req_example", "error": { "code": "invalid_request", "numeric_code": "10000", "message": "Invalid request parameters" } }- invalid_target_workspace · 11003 · 400
Целевое рабочее пространство в заголовке переопределения пусто или задано неверно. Удалите этот заголовок и используйте API-ключ нужного пространства.
Условие: Применяется к запросам с заголовком переопределения рабочего пространства X-Workspace-Id.
Действия и повторы: Исправьте параметры с учётом операции и канала. Повтор неизменённого неверного запроса не устранит ошибку.
Пример JSON; message зависит от фактической причины · 400 · 11003
{ "request_id": "req_example", "error": { "code": "invalid_target_workspace", "numeric_code": "11003", "message": "Invalid target workspace" } }- provider_invalid_request · 30001 · 400
Проверьте поля и форматы, специфичные для канала.
Действия и повторы: Исправьте параметры с учётом операции и канала. Повтор неизменённого неверного запроса не устранит ошибку.
Пример JSON; message зависит от фактической причины · 400 · 30001
{ "request_id": "req_example", "error": { "code": "provider_invalid_request", "numeric_code": "30001", "message": "Provider rejected the request" } }- invalid_api_key · 11001 · 401
Проверьте правильность и активность ключа API.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Пример JSON; message зависит от фактической причины · 401 · 11001
{ "request_id": "req_example", "error": { "code": "invalid_api_key", "numeric_code": "11001", "message": "Invalid API key" } }- missing_api_key · 11000 · 401
Добавьте заголовок X-Api-Key.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Пример · 401 · 11000
{ "request_id": "req_xxx", "error": { "code": "missing_api_key", "numeric_code": "11000", "message": "Missing X-Api-Key header" } }- post_inaccessible · 39005 · 403
Проверьте аккаунт и только те идентификаторы цели, которые требует этот API. post_not_found подтверждает отсутствие публикации. comment_not_found означает, что целевой комментарий верхнего уровня не найден после проверки, а не что проверены все ответы. post_inaccessible означает недоступность, но не доказывает отсутствие и не указывает причину. Сохраните ошибку и выясните результат перед выбором следующего действия.
Действия и повторы: Проверьте идентификатор, принадлежность ресурса и текущее рабочее пространство. Не повторяйте запрос автоматически, считая подтверждённое отсутствие или недоступность временным сбоем сервиса.
Пример JSON; message зависит от фактической причины · 403 · 39005
{ "request_id": "req_example", "error": { "code": "post_inaccessible", "numeric_code": "39005", "message": "Post is not accessible" } }- workspace_override_forbidden · 11002 · 403
Запрос пытается переопределить рабочее пространство без необходимых прав. Удалите заголовок переопределения и используйте API-ключ нужного рабочего пространства.
Условие: Применяется к запросам с заголовком переопределения рабочего пространства X-Workspace-Id.
Действия и повторы: Сохраните request_id и структурированные коды; выясните причину текущего сбоя перед следующим действием.
Пример JSON; message зависит от фактической причины · 403 · 11002
{ "request_id": "req_example", "error": { "code": "workspace_override_forbidden", "numeric_code": "11002", "message": "Workspace override is not allowed" } }- account_not_found · 20020 · 404
Проверьте account_id и используйте X-Api-Key рабочего пространства владельца аккаунта. Текущий ключ не даёт доступа к аккаунту, которого нет в этом пространстве.
Действия и повторы: Проверьте идентификатор, принадлежность ресурса и текущее рабочее пространство. Не повторяйте запрос автоматически, считая подтверждённое отсутствие или недоступность временным сбоем сервиса.
Пример JSON; message зависит от фактической причины · 404 · 20020
{ "request_id": "req_example", "error": { "code": "account_not_found", "numeric_code": "20020", "message": "Account not found" } }- comment_not_found · 39001 · 404
Проверьте аккаунт и только те идентификаторы цели, которые требует этот API. post_not_found подтверждает отсутствие публикации. comment_not_found означает, что целевой комментарий верхнего уровня не найден после проверки, а не что проверены все ответы. post_inaccessible означает недоступность, но не доказывает отсутствие и не указывает причину. Сохраните ошибку и выясните результат перед выбором следующего действия.
Действия и повторы: Проверьте идентификатор, принадлежность ресурса и текущее рабочее пространство. Не повторяйте запрос автоматически, считая подтверждённое отсутствие или недоступность временным сбоем сервиса.
Пример JSON; message зависит от фактической причины · 404 · 39001
{ "request_id": "req_example", "error": { "code": "comment_not_found", "numeric_code": "39001", "message": "Comment not found" } }- post_not_found · 39000 · 404
Проверьте аккаунт и только те идентификаторы цели, которые требует этот API. post_not_found подтверждает отсутствие публикации. comment_not_found означает, что целевой комментарий верхнего уровня не найден после проверки, а не что проверены все ответы. post_inaccessible означает недоступность, но не доказывает отсутствие и не указывает причину. Сохраните ошибку и выясните результат перед выбором следующего действия.
Действия и повторы: Проверьте идентификатор, принадлежность ресурса и текущее рабочее пространство. Не повторяйте запрос автоматически, считая подтверждённое отсутствие или недоступность временным сбоем сервиса.
Пример JSON; message зависит от фактической причины · 404 · 39000
{ "request_id": "req_example", "error": { "code": "post_not_found", "numeric_code": "39000", "message": "Post not found" } }- target_workspace_not_found · 11004 · 404
Переопределённое рабочее пространство не найдено или недоступно. Проверьте его принадлежность, удалите заголовок переопределения и используйте нужный API-ключ; повторы не дадут доступ.
Условие: Применяется к запросам с заголовком переопределения рабочего пространства X-Workspace-Id.
Действия и повторы: Проверьте идентификатор, принадлежность ресурса и текущее рабочее пространство. Не повторяйте запрос автоматически, считая подтверждённое отсутствие или недоступность временным сбоем сервиса.
Пример JSON; message зависит от фактической причины · 404 · 11004
{ "request_id": "req_example", "error": { "code": "target_workspace_not_found", "numeric_code": "11004", "message": "Target workspace not found" } }- account_binding_not_found · 30006 · 409
Нет активной привязки к подключению канала; проверьте состояние аккаунта.
Действия и повторы: Проверьте авторизацию и runtime-статус, затем выберите refresh, start или reconnect с учётом нужного состояния и возможностей канала. Сбой соединения сам по себе не означает выход из аккаунта. Перед зависимыми операциями подтвердите running.
Пример JSON; message зависит от фактической причины · 409 · 30006
{ "request_id": "req_example", "error": { "code": "account_binding_not_found", "numeric_code": "30006", "message": "Account is not bound to an available server" } }- provider_not_ready · 30009 · 409
Подключение не готово. Перед повтором проверьте авторизацию и runtime_status.
Действия и повторы: Проверьте авторизацию и runtime-статус, затем выберите refresh, start или reconnect с учётом нужного состояния и возможностей канала. Сбой соединения сам по себе не означает выход из аккаунта. Перед зависимыми операциями подтвердите running.
Пример JSON; message зависит от фактической причины · 409 · 30009
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30009", "message": "Provider client is not ready" } }- unsupported_by_provider · 30003 · 501
Канал не поддерживает операцию; выберите доступную в таблице возможностей.
Действия и повторы: Выберите поддерживаемые канал и действие. Повтор запроса не добавит возможностей и не откроет доступ к бета-функциям.
Пример · 501 · 30003
{ "request_id": "req_xxx", "error": { "code": "unsupported_by_provider", "numeric_code": "30003", "message": "Operation not supported by this provider" } }- provider_unavailable · 30002 · 502
Сервис канала недоступен. Проверьте состояние или повторите позже; перед повтором записи проверьте предыдущий результат.
Действия и повторы: Перед повторной отправкой выясните, создано ли исходное сообщение или ответ. После тайм-аута или ошибки результат может быть неизвестен; отсутствие ответа в последующей выборке не доказывает, что записи не было. Не отправляйте повторно автоматически.
Пример · 502 · 30002
{ "request_id": "req_example_provider_unavailable", "error": { "code": "provider_unavailable", "numeric_code": "30002", "message": "Provider service unavailable" } }- reply_post_comment_failed · 39004 · 502
Проверьте пост, подтверждённый комментарий верхнего уровня и классификацию ошибки. При неизвестном результате записи сохраните request_id и выясните результат до повтора. Отсутствия ответа в последующем чтении недостаточно для повторной записи.
Действия и повторы: Перед повторной отправкой выясните, создано ли исходное сообщение или ответ. После тайм-аута или ошибки результат может быть неизвестен; отсутствие ответа в последующей выборке не доказывает, что записи не было. Не отправляйте повторно автоматически.
Пример JSON; message зависит от фактической причины · 502 · 39004
{ "request_id": "req_example", "error": { "code": "reply_post_comment_failed", "numeric_code": "39004", "message": "Failed to confirm comment reply; result may be unknown, do not automatically retry" } }