Skip to main content
Базовый адрес API Guard Forum:
Путь метода добавляется после /api/. Например, GET threads/ вызывается по адресу https://forum.arzguard.com/api/threads/; номер страницы можно добавить как ?page=1.
Список тем GET threads/ содержит threads и pagination. Структура успешного ответа зависит от метода и прав доступа.

Формат запроса

Все передаваемые данные используют UTF-8. Ключ авторизации обязателен в каждом запросе:
YOUR_API_KEY — условное обозначение. Подробнее о типах ключей и контексте пользователя — на странице «Авторизация». XenForo также допускает параметры в query string у запросов с телом, но рекомендует передавать их в теле. Выбор метода и список допустимых параметров определяет конкретный endpoint.
JSON — формат обычного ответа API. Для тела запроса используйте форму: application/x-www-form-urlencoded либо multipart/form-data. Не подменяйте их application/json.
В JavaScript обычную форму можно подготовить через URLSearchParams, а форму с файлом — через FormData. При использовании FormData клиент должен самостоятельно сформировать заголовок с boundary; не задавайте Content-Type вручную без этой границы.

Ответы и HTTP-статусы

Обычные ответы возвращаются в JSON. Исключение — методы, явно запрашивающие бинарный файл, например скачивание вложения: такой ответ нужно обрабатывать как файл, а не через response.json(). Стандартный успешный ответ XenForo использует HTTP 200. Не определяйте успех по наличию единого поля вроде success: структура успешного ответа зависит от метода. Для инфраструктурного сбоя обработчик должен учитывать ситуацию, когда JSON разобрать не удалось. Например, ответ внешнего прокси может отличаться от стандартного тела ошибки XenForo.

Структура ошибки

Стандартный ответ XenForo содержит массив errors с одной или несколькими ошибками. Ниже — условный пример ошибки неизвестного ключа:
Текст message может меняться или переводиться. Для распознавания ситуации используйте code, а HTTP-статус сохраняйте как отдельную характеристику. Единого исчерпывающего списка кодов для всех ситуаций нет: они зависят от метода и причины ошибки.

Пример запроса на чтение

Оба примера обращаются к GET threads/; ключу нужен scope thread:read. Они предназначены для серверного окружения с заранее настроенной переменной FORUM_API_KEY. Примеры не содержат реального ключа и не включают обход прав пользователя.
По умолчанию cURL выведет тело ответа, в том числе JSON ошибки. Для диагностики HTTP-статуса можно добавить --write-out '\nHTTP %{http_code}\n'. Не включайте вывод заголовков запроса с ключом в публичные логи.

Пагинация

Пагинация зависит от метода. Если ответ содержит pagination, обрабатывайте страницы по её метаданным и описанию endpoint. Не считайте параметр page или поле pagination обязательными для любого списка. В постраничных ответах pagination содержит current_page, last_page, per_page, shown и total. При пустой коллекции текущая и последняя страницы могут быть 0. Если запрошенная страница выходит за пределы непустой выдачи, API возвращает ошибку invalid_page с параметром max.
Обработку HTTP и errors удобно вынести в общий клиент. Схему успешного ответа и правила пагинации оставьте на уровне конкретного метода: они различаются.

Авторизация

Ключи, scopes и права пользователя, от имени которого работает интеграция.

Контракт REST API XenForo

Официальное руководство по форматам запросов, ответов и ошибок.