Разделяйте получение данных и вход в кабинет
Защищённые запросы данных используют GET на https://api.redditapigateway.com. Поддерживаются X-API-Key: <ключ> и Authorization: Bearer <ключ> как альтернативы. Используйте ключ архива этого домена, а не учётные данные Reddit OAuth. Храните секрет в защищённой конфигурации сервера, исключайте его из открытого кода, URL и журналов диагностики. Ключ архива не содержит ролей и бюджетов пользователей вашего продукта.
Панель счёта на странице ключа использует вход по электронной почте и паролю с сессионной cookie Secure HttpOnly. Это отдельно от заголовка ключа для запросов приложения. Виджет сохраняет идентификаторы счёта и пользователя в localStorage для каждого хоста, чтобы восстанавливать счёт, но не настоящий API-ключ. HttpOnly относится к cookie, а не к localStorage. Вход в панель не аутентифицирует отдельный клиент данных.
/v1/status публичен, не оплачивается и не требует ключа. Он возвращает статическое описание исторического сервиса и подтверждает ответ HTTP-приложения. Поисковый движок, наличие записей, расход кредитов и баланс не проверяются. Не превращайте такой ответ в проверку продуктовой квоты или гарантию готовности поиска. Полученные данные и баланс в панели счёта нужно оценивать по соответствующим источникам, а не по публичному статусу.
Используйте параметры конкретного маршрута
/v1/search ищет публикации и комментарии. /v1/posts добавляет ограничение публикациями, /v1/comments — комментариями. Все три принимают q, subreddit, author, kind, from, to, min_score, limit и page, но не id. kind принимает post и comment; для обоих типов через search не задавайте его. q — текстовый поиск, а не произвольный язык запросов, определение тональности или собственная серверная аналитика.
/v1/item?id=... требует только id и ищет одну архивную запись, которая может отсутствовать. Родители и ответы автоматически не загружаются. /v1/subreddits принимает только prefix и limit для поиска названий сообществ, без постраничного обхода и гарантии глобально точных счётчиков. prefix не является фильтром маршрутов содержимого. Ни один маршрут не принимает произвольный URL Reddit для загрузки или запрос полной беседы.
from и to требуют даты YYYY-MM-DD в UTC и фильтруют created_utc, а не время поступления в архив; последний день to включён полностью. min_score — числовой порог оценки без сортировки и определения качества. Документы содержимого плоские, поля могут различаться. Присутствующие parent_id и link_id допускают локальную группировку, но не являются фильтрами запроса и не подтверждают полную цепочку родителей.
Применяйте границы страниц и правила оплаты
Поиск содержимого принимает limit и page от 1 до 100, по одной странице за запрос. Результаты следуют внутреннему порядку _doc, не времени вставки, хронологии, релевантности или оценке. Локальная сортировка меняет только полученную выборку. Дробление периодов, обход страниц и удаление дублей не доказывают полного охвата или уникальности. Не гарантированы фиксированная схема, неизменный ответ и постоянная доступность записей.
Ответ содержит data, pagination и credits. Читайте pagination.total вместе с relation: eq — точный итог запроса, gte — нижняя граница, unknown — отсутствие надёжного итога, возможно null. Точное число не доказывает, что все совпадения скачаны или вся история Reddit представлена. Сохраняйте has_more и window_exhausted как признаки границ. Возвращённый баланс не является квотой пользователя или резервом на будущие запросы.
Каждое успешное получение стоит один кредит, даже пустое. Дополнительные страницы и успешные повторы оплачиваются отдельно. Некорректные запросы не списываются; сбой источника возвращает резерв. Разрыв соединения может произойти после оплаченного успеха, локальный сбой обработки не возвращает этот кредит. HTTP 400 относится к параметрам, 401 — к ключу, 402 — к балансу, 429 — к частоте. Учитывайте повторы отдельно и сохраняйте ответ до продвижения задания.