Discourse · Capability
Discourse API Documentation — Topics
Discourse API Documentation — Topics. 15 operations. Lead operation: Get the latest topics. Self-contained Naftiko capability covering one Discourse business surface.
What You Can Do
GET
Listlatesttopics
— Get the latest topics
/v1/latest-json
POST
Createtopicpostpm
— Creates a new topic, a new post, or a private message
/v1/posts-json
PUT
Updatetopic
— Update a topic
/v1/t//id-json
GET
Gettopicbyexternalid
— Get topic by external_id
/v1/t/external-id/external-id-json
GET
Gettopic
— Get a single topic
/v1/t/id-json
DELETE
Removetopic
— Remove a topic
/v1/t/id-json
PUT
Bookmarktopic
— Bookmark topic
/v1/t/{id}/bookmark-json
PUT
Updatetopictimestamp
— Update topic timestamp
/v1/t/{id}/change-timestamp-json
POST
Invitegrouptotopic
— Invite group to topic
/v1/t/{id}/invite-group-json
POST
Invitetotopic
— Invite to topic
/v1/t/{id}/invite-json
POST
Setnotificationlevel
— Set notification level
/v1/t/{id}/notifications-json
GET
Getspecificpostsfromtopic
— Get specific posts from a topic
/v1/t/{id}/posts-json
PUT
Updatetopicstatus
— Update the status of a topic
/v1/t/{id}/status-json
POST
Createtopictimer
— Create topic timer
/v1/t/{id}/timer-json
GET
Listtoptopics
— Get the top topics filtered by period
/v1/top-json
MCP Tools
get-latest-topics
Get the latest topics
read-only
idempotent
creates-new-topic-new-post
Creates a new topic, a new post, or a private message
update-topic
Update a topic
idempotent
get-topic-external-id
Get topic by external_id
read-only
idempotent
get-single-topic
Get a single topic
read-only
idempotent
remove-topic
Remove a topic
idempotent
bookmark-topic
Bookmark topic
idempotent
update-topic-timestamp
Update topic timestamp
idempotent
invite-group-topic
Invite group to topic
invite-topic
Invite to topic
set-notification-level
Set notification level
get-specific-posts-topic
Get specific posts from a topic
read-only
idempotent
update-status-topic
Update the status of a topic
idempotent
create-topic-timer
Create topic timer
get-top-topics-filtered-period
Get the top topics filtered by period
read-only
idempotent
Capability Spec
naftiko: 1.0.0-alpha2
info:
label: Discourse API Documentation — Topics
description: 'Discourse API Documentation — Topics. 15 operations. Lead operation: Get the latest topics. Self-contained
Naftiko capability covering one Discourse business surface.'
tags:
- Discourse
- Topics
created: '2026-05-19'
modified: '2026-05-19'
binds:
- namespace: env
keys:
DISCOURSE_API_KEY: DISCOURSE_API_KEY
capability:
consumes:
- type: http
namespace: discourse-topics
baseUri: https://{defaultHost}
description: Discourse API Documentation — Topics business capability. Self-contained, no shared references.
resources:
- name: latest.json
path: /latest.json
operations:
- name: listlatesttopics
method: GET
description: Get the latest topics
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: Api-Key
in: header
type: string
required: true
- name: Api-Username
in: header
type: string
required: true
- name: order
in: query
type: string
description: 'Enum: `default`, `created`, `activity`, `views`, `posts`, `category`,'
- name: ascending
in: query
type: string
description: Defaults to `desc`, add `ascending=true` to sort asc
- name: per_page
in: query
type: integer
description: Maximum number of topics returned, between 1-100
- name: posts.json
path: /posts.json
operations:
- name: createtopicpostpm
method: POST
description: Creates a new topic, a new post, or a private message
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: t---id}.json
path: /t/-/{id}.json
operations:
- name: updatetopic
method: PUT
description: Update a topic
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: Api-Key
in: header
type: string
required: true
- name: Api-Username
in: header
type: string
required: true
- name: id
in: path
type: string
required: true
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: t-external_id-external_id}.json
path: /t/external_id/{external_id}.json
operations:
- name: gettopicbyexternalid
method: GET
description: Get topic by external_id
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: external_id
in: path
type: string
required: true
- name: t-id}.json
path: /t/{id}.json
operations:
- name: gettopic
method: GET
description: Get a single topic
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: Api-Key
in: header
type: string
required: true
- name: Api-Username
in: header
type: string
required: true
- name: id
in: path
type: string
required: true
- name: removetopic
method: DELETE
description: Remove a topic
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: Api-Key
in: header
type: string
required: true
- name: Api-Username
in: header
type: string
required: true
- name: id
in: path
type: string
required: true
- name: t-id-bookmark.json
path: /t/{id}/bookmark.json
operations:
- name: bookmarktopic
method: PUT
description: Bookmark topic
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: Api-Key
in: header
type: string
required: true
- name: Api-Username
in: header
type: string
required: true
- name: id
in: path
type: string
required: true
- name: t-id-change-timestamp.json
path: /t/{id}/change-timestamp.json
operations:
- name: updatetopictimestamp
method: PUT
description: Update topic timestamp
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: Api-Key
in: header
type: string
required: true
- name: Api-Username
in: header
type: string
required: true
- name: id
in: path
type: string
required: true
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: t-id-invite-group.json
path: /t/{id}/invite-group.json
operations:
- name: invitegrouptotopic
method: POST
description: Invite group to topic
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: Api-Key
in: header
type: string
required: true
- name: Api-Username
in: header
type: string
required: true
- name: id
in: path
type: string
required: true
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: t-id-invite.json
path: /t/{id}/invite.json
operations:
- name: invitetotopic
method: POST
description: Invite to topic
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: Api-Key
in: header
type: string
required: true
- name: Api-Username
in: header
type: string
required: true
- name: id
in: path
type: string
required: true
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: t-id-notifications.json
path: /t/{id}/notifications.json
operations:
- name: setnotificationlevel
method: POST
description: Set notification level
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: Api-Key
in: header
type: string
required: true
- name: Api-Username
in: header
type: string
required: true
- name: id
in: path
type: string
required: true
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: t-id-posts.json
path: /t/{id}/posts.json
operations:
- name: getspecificpostsfromtopic
method: GET
description: Get specific posts from a topic
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: Api-Key
in: header
type: string
required: true
- name: Api-Username
in: header
type: string
required: true
- name: id
in: path
type: string
required: true
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: t-id-status.json
path: /t/{id}/status.json
operations:
- name: updatetopicstatus
method: PUT
description: Update the status of a topic
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: Api-Key
in: header
type: string
required: true
- name: Api-Username
in: header
type: string
required: true
- name: id
in: path
type: string
required: true
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: t-id-timer.json
path: /t/{id}/timer.json
operations:
- name: createtopictimer
method: POST
description: Create topic timer
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: Api-Key
in: header
type: string
required: true
- name: Api-Username
in: header
type: string
required: true
- name: id
in: path
type: string
required: true
- name: body
in: body
type: object
description: Request body (JSON).
required: false
- name: top.json
path: /top.json
operations:
- name: listtoptopics
method: GET
description: Get the top topics filtered by period
outputRawFormat: json
outputParameters:
- name: result
type: object
value: $.
inputParameters:
- name: Api-Key
in: header
type: string
required: true
- name: Api-Username
in: header
type: string
required: true
- name: period
in: query
type: string
description: 'Enum: `all`, `yearly`, `quarterly`, `monthly`, `weekly`, `daily`'
- name: per_page
in: query
type: integer
description: Maximum number of topics returned, between 1-100
exposes:
- type: rest
namespace: discourse-topics-rest
port: 8080
description: REST adapter for Discourse API Documentation — Topics. One Spectral-compliant resource per consumed operation,
prefixed with /v1.
resources:
- path: /v1/latest-json
name: latest-json
description: REST surface for latest.json.
operations:
- method: GET
name: listlatesttopics
description: Get the latest topics
call: discourse-topics.listlatesttopics
with:
Api-Key: rest.Api-Key
Api-Username: rest.Api-Username
order: rest.order
ascending: rest.ascending
per_page: rest.per_page
outputParameters:
- type: object
mapping: $.
- path: /v1/posts-json
name: posts-json
description: REST surface for posts.json.
operations:
- method: POST
name: createtopicpostpm
description: Creates a new topic, a new post, or a private message
call: discourse-topics.createtopicpostpm
with:
body: rest.body
outputParameters:
- type: object
mapping: $.
- path: /v1/t//id-json
name: t-id-json
description: REST surface for t---id}.json.
operations:
- method: PUT
name: updatetopic
description: Update a topic
call: discourse-topics.updatetopic
with:
Api-Key: rest.Api-Key
Api-Username: rest.Api-Username
id: rest.id
body: rest.body
outputParameters:
- type: object
mapping: $.
- path: /v1/t/external-id/external-id-json
name: t-external-id-external-id-json
description: REST surface for t-external_id-external_id}.json.
operations:
- method: GET
name: gettopicbyexternalid
description: Get topic by external_id
call: discourse-topics.gettopicbyexternalid
with:
external_id: rest.external_id
outputParameters:
- type: object
mapping: $.
- path: /v1/t/id-json
name: t-id-json
description: REST surface for t-id}.json.
operations:
- method: GET
name: gettopic
description: Get a single topic
call: discourse-topics.gettopic
with:
Api-Key: rest.Api-Key
Api-Username: rest.Api-Username
id: rest.id
outputParameters:
- type: object
mapping: $.
- method: DELETE
name: removetopic
description: Remove a topic
call: discourse-topics.removetopic
with:
Api-Key: rest.Api-Key
Api-Username: rest.Api-Username
id: rest.id
outputParameters:
- type: object
mapping: $.
- path: /v1/t/{id}/bookmark-json
name: t-id-bookmark-json
description: REST surface for t-id-bookmark.json.
operations:
- method: PUT
name: bookmarktopic
description: Bookmark topic
call: discourse-topics.bookmarktopic
with:
Api-Key: rest.Api-Key
Api-Username: rest.Api-Username
id: rest.id
outputParameters:
- type: object
mapping: $.
- path: /v1/t/{id}/change-timestamp-json
name: t-id-change-timestamp-json
description: REST surface for t-id-change-timestamp.json.
operations:
- method: PUT
name: updatetopictimestamp
description: Update topic timestamp
call: discourse-topics.updatetopictimestamp
with:
Api-Key: rest.Api-Key
Api-Username: rest.Api-Username
id: rest.id
body: rest.body
outputParameters:
- type: object
mapping: $.
- path: /v1/t/{id}/invite-group-json
name: t-id-invite-group-json
description: REST surface for t-id-invite-group.json.
operations:
- method: POST
name: invitegrouptotopic
description: Invite group to topic
call: discourse-topics.invitegrouptotopic
with:
Api-Key: rest.Api-Key
Api-Username: rest.Api-Username
id: rest.id
body: rest.body
outputParameters:
- type: object
mapping: $.
- path: /v1/t/{id}/invite-json
name: t-id-invite-json
description: REST surface for t-id-invite.json.
operations:
- method: POST
name: invitetotopic
description: Invite to topic
call: discourse-topics.invitetotopic
with:
Api-Key: rest.Api-Key
Api-Username: rest.Api-Username
id: rest.id
body: rest.body
outputParameters:
- type: object
mapping: $.
- path: /v1/t/{id}/notifications-json
name: t-id-notifications-json
description: REST surface for t-id-notifications.json.
operations:
- method: POST
name: setnotificationlevel
description: Set notification level
call: discourse-topics.setnotificationlevel
with:
Api-Key: rest.Api-Key
Api-Username: rest.Api-Username
id: rest.id
body: rest.body
outputParameters:
- type: object
mapping: $.
- path: /v1/t/{id}/posts-json
name: t-id-posts-json
description: REST surface for t-id-posts.json.
operations:
- method: GET
name: getspecificpostsfromtopic
description: Get specific posts from a topic
call: discourse-topics.getspecificpostsfromtopic
with:
Api-Key: rest.Api-Key
Api-Username: rest.Api-Username
id: rest.id
body: rest.body
outputParameters:
- type: object
mapping: $.
- path: /v1/t/{id}/status-json
name: t-id-status-json
description: REST surface for t-id-status.json.
operations:
- method: PUT
name: updatetopicstatus
description: Update the status of a topic
call: discourse-topics.updatetopicstatus
with:
Api-Key: rest.Api-Key
Api-Username: rest.Api-Username
id: rest.id
body: rest.body
outputParameters:
- type: object
mapping: $.
- path: /v1/t/{id}/timer-json
name: t-id-timer-json
description: REST surface for t-id-timer.json.
operations:
- method: POST
name: createtopictimer
description: Create topic timer
call: discourse-topics.createtopictimer
with:
Api-Key: rest.Api-Key
Api-Username: rest.Api-Username
id: rest.id
body: rest.body
outputParameters:
- type: object
mapping: $.
- path: /v1/top-json
name: top-json
description: REST surface for top.json.
operations:
- method: GET
name: listtoptopics
description: Get the top topics filtered by period
call: discourse-topics.listtoptopics
with:
Api-Key: rest.Api-Key
Api-Username: rest.Api-Username
period: rest.period
per_page: rest.per_page
outputParameters:
- type: object
mapping: $.
- type: mcp
namespace: discourse-topics-mcp
port: 9090
transport: http
description: MCP adapter for Discourse API Documentation — Topics. One tool per consumed operation, routed inline through
this capability's consumes block.
tools:
- name: get-latest-topics
description: Get the latest topics
hints:
readOnly: true
destructive: false
idempotent: true
call: discourse-topics.listlatesttopics
with:
Api-Key: tools.Api-Key
Api-Username: tools.Api-Username
order: tools.order
ascending: tools.ascending
per_page: tools.per_page
outputParameters:
- type: object
mapping: $.
- name: creates-new-topic-new-post
description: Creates a new topic, a new post, or a private message
hints:
readOnly: false
destructive: false
idempotent: false
call: discourse-topics.createtopicpostpm
with:
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: update-topic
description: Update a topic
hints:
readOnly: false
destructive: false
idempotent: true
call: discourse-topics.updatetopic
with:
Api-Key: tools.Api-Key
Api-Username: tools.Api-Username
id: tools.id
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: get-topic-external-id
description: Get topic by external_id
hints:
readOnly: true
destructive: false
idempotent: true
call: discourse-topics.gettopicbyexternalid
with:
external_id: tools.external_id
outputParameters:
- type: object
mapping: $.
- name: get-single-topic
description: Get a single topic
hints:
readOnly: true
destructive: false
idempotent: true
call: discourse-topics.gettopic
with:
Api-Key: tools.Api-Key
Api-Username: tools.Api-Username
id: tools.id
outputParameters:
- type: object
mapping: $.
- name: remove-topic
description: Remove a topic
hints:
readOnly: false
destructive: true
idempotent: true
call: discourse-topics.removetopic
with:
Api-Key: tools.Api-Key
Api-Username: tools.Api-Username
id: tools.id
outputParameters:
- type: object
mapping: $.
- name: bookmark-topic
description: Bookmark topic
hints:
readOnly: false
destructive: false
idempotent: true
call: discourse-topics.bookmarktopic
with:
Api-Key: tools.Api-Key
Api-Username: tools.Api-Username
id: tools.id
outputParameters:
- type: object
mapping: $.
- name: update-topic-timestamp
description: Update topic timestamp
hints:
readOnly: false
destructive: false
idempotent: true
call: discourse-topics.updatetopictimestamp
with:
Api-Key: tools.Api-Key
Api-Username: tools.Api-Username
id: tools.id
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: invite-group-topic
description: Invite group to topic
hints:
readOnly: false
destructive: false
idempotent: false
call: discourse-topics.invitegrouptotopic
with:
Api-Key: tools.Api-Key
Api-Username: tools.Api-Username
id: tools.id
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: invite-topic
description: Invite to topic
hints:
readOnly: false
destructive: false
idempotent: false
call: discourse-topics.invitetotopic
with:
Api-Key: tools.Api-Key
Api-Username: tools.Api-Username
id: tools.id
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: set-notification-level
description: Set notification level
hints:
readOnly: false
destructive: false
idempotent: false
call: discourse-topics.setnotificationlevel
with:
Api-Key: tools.Api-Key
Api-Username: tools.Api-Username
id: tools.id
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: get-specific-posts-topic
description: Get specific posts from a topic
hints:
readOnly: true
destructive: false
idempotent: true
call: discourse-topics.getspecificpostsfromtopic
with:
Api-Key: tools.Api-Key
Api-Username: tools.Api-Username
id: tools.id
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: update-status-topic
description: Update the status of a topic
hints:
readOnly: false
destructive: false
idempotent: true
call: discourse-topics.updatetopicstatus
with:
Api-Key: tools.Api-Key
Api-Username: tools.Api-Username
id: tools.id
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: create-topic-timer
description: Create topic timer
hints:
readOnly: false
destructive: false
idempotent: false
call: discourse-topics.createtopictimer
with:
Api-Key: tools.Api-Key
Api-Username: tools.Api-Username
id: tools.id
body: tools.body
outputParameters:
- type: object
mapping: $.
- name: get-top-topics-filtered-period
description: Get the top topics filtered by period
hints:
readOnly: true
destructive: false
idempotent: true
call: discourse-topics.listtoptopics
with:
Api-Key: tools.Api-Key
Api-Username: tools.Api-Username
period: tools.period
per_page: tools.per_page
outputParameters:
- type: object
mapping: $.