La documentación de la API de Discourse menciona un "cuerpo de solicitud" para una solicitud GET

GET siempre incluye una cadena de consulta y nunca contiene datos de envío (por eso obtienes el error 413 payload too large, ya que no espera ningún dato). Cuando consultas datos de un servidor sin realizar cambios, casi siempre deberás usar GET en lugar de POST. Por lo tanto, deberías usar params= en lugar de data=.

Creo que la documentación de esta llamada específica a la API está mal redactada (“Request Body schema” indica claramente el uso de POST data), así que traslado este tema a Contribute > Bug y no necesitas pagarme nada.

import requests
import json

def get_post_from_topic(topic_id, post_id):
    endpoint = f"https://forum.example.com/t/{topic_id}/posts.json"
    api_username = 'system'
    api_key = 'REDACTED'
    headers = {
        "Content-Type": "application/json",
        "Api-Key": api_key,
        "Api-Username": api_username,
    }
    params = {
      "post_ids[]": post_id
    }
    response = requests.get(endpoint, headers=headers, params = params) 
    if response.status_code == 200:
        return response

response = get_post_from_topic(6,8)
print(response.json())

{"post_stream": {"posts": [{"id": 8, "name": "system", "username": "system", "avatar_template": "/images/discourse-logo-sketch-small.png", "created_at": "2022-06-26T04:44:23.637Z", "cooked": "<p><a name=\"collect\"></a></p>\n<h2>\n<a name=\"what-information-do-we-collectcollect-1\" class=\"anchor\" href=\"#what-information-do-we-collectcollect-1\"></a><a href=\"#collect\">What information do we collect...