/t/slug/123.json?post_number=10 возвращает 5-й пост. /t/slug/123.json?post_number=50 возвращает 45-й пост и так далее. Смещение всегда составляет 5. Если вы хотите получить все посты, необходимо использовать пагинацию, и если не учесть это смещение, вы получите неверный список.
Я могу лишь предположить, что это сделано для включения нескольких предыдущих постов для контекста. Если это так, то, на мой взгляд, это должно реализовываться на уровне интерфейса, а не API.
Как одностраничное приложение, Discourse эффективно использует свой API для минимизации работы. Нерационально делать один вызов API на каждый пост; это резко увеличило бы количество обменов данными между клиентом и сервером.
Тривиально выбрать ожидаемый пост из результата. Как и выше, получение только обработанного содержимого поста 40:
○ → curl -s 'https://meta.discourse.org/t/fkb-pro-social-theme/234323.json?post_number=40' | jq -r '.post_stream.posts[] | select(.post_number == 40) | .cooked'
<p>Привет, Ти́аго,</p>
<p>Не могли бы вы немного уточнить? Несколько скриншотов, ваш реальный код и место появления вашей рекламы были бы очень полезны. Спасибо <img src="https://emoji.discourse-cdn.com/twitter/slightly_smiling_face.png?v=12" title=":slightly_smiling_face:" class="emoji" alt=":slightly_smiling_face:" loading="lazy" width="20" height="20"></p>
Или, если вы абсолютно хотите возвращать информацию только об одном запрашиваемом посте, вы можете выполнить запрос Data Explorer, который делает именно это.