Updating topic body via the API

AI-generated summary

Updating topic body via the API

kennym is trying to update a topic body via the API but is having trouble. Falco advises using PUT /posts/:id with post[raw] in FormData, as stated in the official docs. However, kennym clarifies that :id refers to the post ID, not the topic ID.

As explained by Falco, a topic is essentially a collection of posts, and the first post is considered the topic body. To update the topic body, one would need to update the first post. kennym looks into retrieving the topic’s post ID using the GET /t/{id}.json endpoint.

Falco suggests saving the post ID when creating the topic to make future updates easier.

I’m trying to update a topic body via the API, but I’m not sure how to do it.

I tried to use POST /posts/ and providing it with the topic_id which only creates a new post for a topic.

I also tried PUT /posts/:id but providing it with the topic id doesn’t update the topic. I actually get a 403.

PUT /t/:slug/:id doesn’t seem to be what I’m looking for.

Any advice here, please?

The official docs say it’s a PUT for /posts/:id with post[raw] in FormData:

Where :id is equal to the topic ID in this case?

No, it’s the post id.

On Discourse land, a topic it’s just a bunch of posts. A topic has no body, the first post of the topic is the body.

Got it. Discourse API Docs

It really depends on how you are managing stuff.

If it’s a sync, you can save the post id of the topic when you create it, so it’s easy when you need to update it later (if that’s a common operation).