Не удалось заблокировать пост через API

Я делаю несколько вызовов API из моего приложения к Discourse для изменения постов.

В первом вызове я редактирую пост. Это работает отлично. В следующем вызове я пытаюсь заблокировать пост.

Мой вызов блокировки поста из JavaScript выглядит так:

fetch(`https://forum.hollowverse.com/posts/1817/locked.json`, {
  method: 'PUT',
  headers: {
    'Api-Key': process.env.DISCOURSE_SYSTEM_PRIVILEGE_SECRET,
    'content-type': 'application/json',
    'Api-Username': 'hollowbot',
  },
  body: JSON.stringify({locked: true}),
});

Когда я выполняю этот вызов, Discourse отвечает мне {locked: false}.

Я попробовал заблокировать пост вручную и проанализировал вызов API, который делает клиент Discourse. Он выглядит очень похоже на тот, что я делаю из моего приложения, за исключением, возможно, метода аутентификации.

Не уверен, что происходит. Есть какие-нибудь идеи?

Я не вижу очевидной проблемы. Вы получили это, следуя руководству Как провести реверс-инжиниринг API Discourse? Именно так я бы поступил, чтобы помочь, если бы был за компьютером.

API для блокировки поста документирована здесь Discourse API Docs, но да, я также пытался реверс-инжинирить то, как это делает клиент Discourse, и это выглядит очень похоже на то, как я делаю это из своего приложения.

Код code:

params[:locked] === "true" ? locker.lock : locker.unlock

Похоже, что выполняется сравнение строк.

Это означает, что вам нужно отправлять "locked": "true", а не "locked": true, и что документацию или код необходимо обновить, чтобы отразить или изменить такое поведение.

Браузер не отправляет JSON-запрос, он отправляет Content-Type: application/x-www-form-urlencoded, который интерпретирует параметр как строку, и именно поэтому это работает в браузере.

Спасибо за вашу помощь, Ричард!

Узнал новое!

И я займусь созданием запроса на обновление документации.