Совместимость заголовков и результаты HTTP
Для защищённого чтения используйте GET на https://api.redditapiproxy.com. Поддерживаются X-API-Key: <ключ> и Authorization: Bearer <ключ> как альтернативы. Учётные данные относятся к этому домену архива, а не к Reddit OAuth. Храните секрет на сервере и проверяйте построение запроса, не раскрывая его значение. Панель счёта использует отдельную cookie Secure HttpOnly; вход в неё не аутентифицирует GET-запрос вашего приложения.
HTTP 400 означает неправильные или неподдерживаемые параметры. Проверьте маршрут и строку запроса вместо отправки тела JSON. HTTP 401 означает отсутствующий или недействительный ключ, в том числе старый, отключённый регенерацией. Сначала проверьте домен и заголовок. HTTP 402 указывает на нехватку кредитов. HTTP 429 — ограничение частоты; используйте задержку и ограниченное число попыток вместо немедленного цикла.
/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 для поиска названий сообществ, без обхода страниц. Счётчики не гарантированы как глобально точные. Префикс не является фильтром маршрутов содержимого, неизвестный итог каталога не равен точной переписи всех сообществ 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. Точное число не доказывает загрузку всех совпадений или наличие всей истории в архиве. Сохраняйте признаки has_more и window_exhausted для описания границ; это не курсоры неограниченного экспорта.
Успешное получение стоит один кредит, включая пустые результаты и успешные повторы. Некорректные запросы не списываются; сбой источника возвращает резерв. Разрыв соединения клиентом может последовать за оплаченным успехом, поэтому отсутствие ответа оставляет результат неопределённым. Ошибка собственного обработчика или базы данных не доказывает отказ источника. Сохраните ответ до продвижения локального прогресса и учитывайте успешные повторы отдельно.