> ## Documentation Index
> Fetch the complete documentation index at: https://docs.arzguard.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Первый запрос к Guard Forum

> Настройте доступ к API форума и получите список тем.

Для работы понадобится API-ключ, выданный администратором форума. Храните его в серверном окружении как `FORUM_API_KEY`. Все примеры ниже выполняют чтение и не требуют создавать тестовые публикации или пользователей.

<Steps>
  <Step title="Подготовьте ключ">
    Для чтения списка тем ключу нужен scope `thread:read`. Сохраните выданный ключ в переменной окружения `FORUM_API_KEY` на сервере интеграции.

    Scopes определяют доступные методы, а права пользователя — доступные данные. Убедитесь, что выбранный контекст может читать нужные темы.
  </Step>

  <Step title="Определите пользователя запроса">
    У Guest key контекст гостевой, а User key закреплён за пользователем. Для Super user key без заголовка `XF-Api-User` также используется гость.

    Если интеграции нужен выбранный пользователь, добавьте заголовок с его ID. В примере `123` — условное значение:

    ```http theme={null}
    XF-Api-User: 123
    ```

    Выбор пользователя относится только к Super user key. Подробности — в разделе [«Авторизация»](/guard-forum/authentication).
  </Step>

  <Step title="Получите список тем">
    Запросите первую страницу тем. Ответ учитывает права пользовательского контекста; закрытые для него темы в выдачу не попадут.

    ```bash theme={null}
    curl --silent --show-error \
      --header "XF-Api-Key: $FORUM_API_KEY" \
      'https://forum.arzguard.com/api/threads/?page=1'
    ```

    Результат содержит массив `threads` с темами и объект `pagination` с данными текущей страницы. Подробные параметры и фильтры — у метода [«Список тем»](/guard-forum/api/get-threads).
  </Step>
</Steps>

## Запрос на Node.js

Код предназначен для Node.js с поддержкой `fetch` и `AbortSignal.timeout`. Он не выводит ключ или содержимое профилей пользователей.

```javascript theme={null}
const apiKey = process.env.FORUM_API_KEY;
if (!apiKey) throw new Error('Не задана FORUM_API_KEY');

const response = await fetch('https://forum.arzguard.com/api/threads/?page=1', {
  headers: {
    'XF-Api-Key': apiKey,
    Accept: 'application/json',
  },
  signal: AbortSignal.timeout(15_000),
  redirect: 'error',
});

let data;
try {
  data = await response.json();
} catch {
  throw new Error(`HTTP ${response.status}: ответ не в формате JSON`);
}

if (!response.ok) {
  const codes = Array.isArray(data.errors)
    ? data.errors.map(error => error.code).join(', ')
    : 'unknown_error';
  throw new Error(`HTTP ${response.status}: ${codes}`);
}

console.log(`Тем на странице: ${data.threads.length}`);
```

Таймаут в 15 секунд выбран для примера, а не является ограничением сервиса.

## Следующий шаг

Выберите ресурс в [каталоге методов](/guard-forum/catalog). Перед вызовом проверьте HTTP-метод, scopes, обязательные параметры и пользовательские права. Для операций записи используйте тело формы, а не JSON.

<CardGroup cols={2}>
  <Card title="Каталог API" icon="list" href="/guard-forum/catalog">
    Темы, сообщения, профили, диалоги и другие возможности API.
  </Card>

  <Card title="Ошибки и пагинация" icon="code" href="/guard-forum/requests-and-errors">
    Обработайте неуспешный ответ и постраничную выдачу.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.