Novu · Capability

Novu API — Topics

Notifications — Topics. 11 operations. Lead operation: Check Topic Subscriber. Self-contained Naftiko capability covering one Novu business surface.

Novu API — Topics is a Naftiko capability published by Novu, one of 16 capabilities the APIs.io network indexes for this provider. It bundles 11 operations across the GET, POST, PATCH, and DELETE methods.

The capability includes 5 read-only operations and 6 state-changing operations. Lead operation: Novu Check Topic Subscriber. Can be deployed as a REST endpoint, MCP tool, or Agent Skill via Naftiko.

Tagged areas include Novu, Notifications, and Topics.

Run with Naftiko NovuNotificationsTopics

What You Can Do

GET
Topicsv1controller_gettopicsubscriber — Novu Check Topic Subscriber
/v1/topics/{topicKey}/subscribers/{externalSubscriberId}
GET
Topicscontroller_listtopics — Novu List All Topics
/v2/topics
POST
Topicscontroller_upserttopic — Novu Create a Topic
/v2/topics
GET
Topicscontroller_gettopic — Novu Retrieve a Topic
/v2/topics/{topicKey}
PATCH
Topicscontroller_updatetopic — Novu Update a Topic
/v2/topics/{topicKey}
DELETE
Topicscontroller_deletetopic — Novu Delete a Topic
/v2/topics/{topicKey}
GET
Topicscontroller_listtopicsubscriptions — Novu List Topic Subscriptions
/v2/topics/{topicKey}/subscriptions
POST
Topicscontroller_createtopicsubscriptions — Novu Create Topic Subscriptions
/v2/topics/{topicKey}/subscriptions
DELETE
Topicscontroller_deletetopicsubscriptions — Novu Delete Topic Subscriptions
/v2/topics/{topicKey}/subscriptions
GET
Topicscontroller_gettopicsubscription — Novu Retrieve a Topic Subscription
/v2/topics/{topicKey}/subscriptions/{identifier}
PATCH
Topicscontroller_updatetopicsubscription — Novu Update a Topic Subscription
/v2/topics/{topicKey}/subscriptions/{identifier}

MCP Tools

check-topic-subscriber

Novu Check Topic Subscriber

read-only idempotent
list-all-topics

Novu List All Topics

read-only idempotent
create-topic

Novu Create a Topic

retrieve-topic

Novu Retrieve a Topic

read-only idempotent
update-topic

Novu Update a Topic

idempotent
delete-topic

Novu Delete a Topic

idempotent
list-topic-subscriptions

Novu List Topic Subscriptions

read-only idempotent
create-topic-subscriptions

Novu Create Topic Subscriptions

delete-topic-subscriptions

Novu Delete Topic Subscriptions

idempotent
retrieve-topic-subscription

Novu Retrieve a Topic Subscription

read-only idempotent
update-topic-subscription

Novu Update a Topic Subscription

idempotent

Capability Spec

novu-topics.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: Novu API — Topics
  description: 'Notifications — Topics. 11 operations. Lead operation: Check Topic Subscriber. Self-contained Naftiko capability covering one Novu business surface.'
  tags:
  - Novu
  - Notifications
  - Topics
  created: '2026-05-25'
  modified: '2026-05-25'
binds:
- namespace: env
  keys:
    NOVU_API_KEY: NOVU_API_KEY
capability:
  consumes:
  - type: http
    namespace: novu-topics
    baseUri: https://api.novu.co
    description: Novu REST API — Topics business capability. Self-contained, no shared references.
    authentication:
      type: apikey
      key: Authorization
      value: '{{env.NOVU_API_KEY}}'
      placement: header
    resources:
    - name: v1-topics-topickey-subscribers-externalsubscriberid
      path: /v1/topics/{topicKey}/subscribers/{externalSubscriberId}
      operations:
      - name: TopicsV1Controller_getTopicSubscriber
        method: GET
        description: Novu Check Topic Subscriber
        inputParameters:
        - name: externalSubscriberId
          in: path
          type: string
          required: true
          description: The external subscriber id
        - name: topicKey
          in: path
          type: string
          required: true
          description: The topic key
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: v2-topics
      path: /v2/topics
      operations:
      - name: TopicsController_listTopics
        method: GET
        description: Novu List All Topics
        inputParameters:
        - name: after
          in: query
          type: string
          required: false
          description: Cursor for pagination indicating the starting point after which to fetch results.
        - name: before
          in: query
          type: string
          required: false
          description: Cursor for pagination indicating the ending point before which to fetch results.
        - name: limit
          in: query
          type: number
          required: false
          description: Limit the number of items to return (max 100)
        - name: orderDirection
          in: query
          type: string
          required: false
          description: Direction of sorting
        - name: orderBy
          in: query
          type: string
          required: false
          description: Field to order by
        - name: includeCursor
          in: query
          type: boolean
          required: false
          description: Include cursor item in response
        - name: key
          in: query
          type: string
          required: false
          description: Key of the topic to filter results.
        - name: name
          in: query
          type: string
          required: false
          description: Name of the topic to filter results.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: TopicsController_upsertTopic
        method: POST
        description: Novu Create a Topic
        inputParameters:
        - name: failIfExists
          in: query
          type: boolean
          required: false
          description: If true, the request will fail if a topic with the same key already exists
        - name: body
          in: body
          type: object
          required: true
          description: Request body payload
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: v2-topics-topickey
      path: /v2/topics/{topicKey}
      operations:
      - name: TopicsController_getTopic
        method: GET
        description: Novu Retrieve a Topic
        inputParameters:
        - name: topicKey
          in: path
          type: string
          required: true
          description: The key identifier of the topic
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: TopicsController_updateTopic
        method: PATCH
        description: Novu Update a Topic
        inputParameters:
        - name: topicKey
          in: path
          type: string
          required: true
          description: The key identifier of the topic
        - name: body
          in: body
          type: object
          required: true
          description: Request body payload
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: TopicsController_deleteTopic
        method: DELETE
        description: Novu Delete a Topic
        inputParameters:
        - name: topicKey
          in: path
          type: string
          required: true
          description: The key identifier of the topic
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: v2-topics-topickey-subscriptions
      path: /v2/topics/{topicKey}/subscriptions
      operations:
      - name: TopicsController_listTopicSubscriptions
        method: GET
        description: Novu List Topic Subscriptions
        inputParameters:
        - name: topicKey
          in: path
          type: string
          required: true
          description: The key identifier of the topic
        - name: after
          in: query
          type: string
          required: false
          description: Cursor for pagination indicating the starting point after which to fetch results.
        - name: before
          in: query
          type: string
          required: false
          description: Cursor for pagination indicating the ending point before which to fetch results.
        - name: limit
          in: query
          type: number
          required: false
          description: Limit the number of items to return (max 100)
        - name: orderDirection
          in: query
          type: string
          required: false
          description: Direction of sorting
        - name: orderBy
          in: query
          type: string
          required: false
          description: Field to order by
        - name: includeCursor
          in: query
          type: boolean
          required: false
          description: Include cursor item in response
        - name: subscriberId
          in: query
          type: string
          required: false
          description: Filter by subscriber ID
        - name: contextKeys
          in: query
          type: array
          required: false
          description: 'Filter by exact context keys, order insensitive (format: "type:id")'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: TopicsController_createTopicSubscriptions
        method: POST
        description: Novu Create Topic Subscriptions
        inputParameters:
        - name: topicKey
          in: path
          type: string
          required: true
          description: The key identifier of the topic
        - name: body
          in: body
          type: object
          required: true
          description: Request body payload
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: TopicsController_deleteTopicSubscriptions
        method: DELETE
        description: Novu Delete Topic Subscriptions
        inputParameters:
        - name: topicKey
          in: path
          type: string
          required: true
          description: The key identifier of the topic
        - name: body
          in: body
          type: object
          required: true
          description: Request body payload
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: v2-topics-topickey-subscriptions-identifier
      path: /v2/topics/{topicKey}/subscriptions/{identifier}
      operations:
      - name: TopicsController_getTopicSubscription
        method: GET
        description: Novu Retrieve a Topic Subscription
        inputParameters:
        - name: topicKey
          in: path
          type: string
          required: true
          description: The key identifier of the topic
        - name: identifier
          in: path
          type: string
          required: true
          description: The unique identifier of the subscription
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: TopicsController_updateTopicSubscription
        method: PATCH
        description: Novu Update a Topic Subscription
        inputParameters:
        - name: topicKey
          in: path
          type: string
          required: true
          description: The key identifier of the topic
        - name: identifier
          in: path
          type: string
          required: true
          description: The unique identifier of the subscription
        - name: body
          in: body
          type: object
          required: true
          description: Request body payload
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
  exposes:
  - type: rest
    namespace: novu-topics-rest
    port: 8080
    description: REST adapter for Novu API — Topics. One Spectral-compliant resource per consumed operation.
    resources:
    - path: /v1/topics/{topicKey}/subscribers/{externalSubscriberId}
      name: v1-topics-topickey-subscribers-externalsubscriberid
      description: REST surface for /v1/topics/{topicKey}/subscribers/{externalSubscriberId}.
      operations:
      - method: GET
        name: TopicsV1Controller_getTopicSubscriber
        description: Novu Check Topic Subscriber
        call: novu-topics.TopicsV1Controller_getTopicSubscriber
        with:
          externalSubscriberId: rest.externalSubscriberId
          topicKey: rest.topicKey
        outputParameters:
        - type: object
          mapping: $.
    - path: /v2/topics
      name: v2-topics
      description: REST surface for /v2/topics.
      operations:
      - method: GET
        name: TopicsController_listTopics
        description: Novu List All Topics
        call: novu-topics.TopicsController_listTopics
        with:
          after: rest.after
          before: rest.before
          limit: rest.limit
          orderDirection: rest.orderDirection
          orderBy: rest.orderBy
          includeCursor: rest.includeCursor
          key: rest.key
          name: rest.name
        outputParameters:
        - type: object
          mapping: $.
      - method: POST
        name: TopicsController_upsertTopic
        description: Novu Create a Topic
        call: novu-topics.TopicsController_upsertTopic
        with:
          failIfExists: rest.failIfExists
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v2/topics/{topicKey}
      name: v2-topics-topickey
      description: REST surface for /v2/topics/{topicKey}.
      operations:
      - method: GET
        name: TopicsController_getTopic
        description: Novu Retrieve a Topic
        call: novu-topics.TopicsController_getTopic
        with:
          topicKey: rest.topicKey
        outputParameters:
        - type: object
          mapping: $.
      - method: PATCH
        name: TopicsController_updateTopic
        description: Novu Update a Topic
        call: novu-topics.TopicsController_updateTopic
        with:
          topicKey: rest.topicKey
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
      - method: DELETE
        name: TopicsController_deleteTopic
        description: Novu Delete a Topic
        call: novu-topics.TopicsController_deleteTopic
        with:
          topicKey: rest.topicKey
        outputParameters:
        - type: object
          mapping: $.
    - path: /v2/topics/{topicKey}/subscriptions
      name: v2-topics-topickey-subscriptions
      description: REST surface for /v2/topics/{topicKey}/subscriptions.
      operations:
      - method: GET
        name: TopicsController_listTopicSubscriptions
        description: Novu List Topic Subscriptions
        call: novu-topics.TopicsController_listTopicSubscriptions
        with:
          topicKey: rest.topicKey
          after: rest.after
          before: rest.before
          limit: rest.limit
          orderDirection: rest.orderDirection
          orderBy: rest.orderBy
          includeCursor: rest.includeCursor
          subscriberId: rest.subscriberId
          contextKeys: rest.contextKeys
        outputParameters:
        - type: object
          mapping: $.
      - method: POST
        name: TopicsController_createTopicSubscriptions
        description: Novu Create Topic Subscriptions
        call: novu-topics.TopicsController_createTopicSubscriptions
        with:
          topicKey: rest.topicKey
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
      - method: DELETE
        name: TopicsController_deleteTopicSubscriptions
        description: Novu Delete Topic Subscriptions
        call: novu-topics.TopicsController_deleteTopicSubscriptions
        with:
          topicKey: rest.topicKey
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v2/topics/{topicKey}/subscriptions/{identifier}
      name: v2-topics-topickey-subscriptions-identifier
      description: REST surface for /v2/topics/{topicKey}/subscriptions/{identifier}.
      operations:
      - method: GET
        name: TopicsController_getTopicSubscription
        description: Novu Retrieve a Topic Subscription
        call: novu-topics.TopicsController_getTopicSubscription
        with:
          topicKey: rest.topicKey
          identifier: rest.identifier
        outputParameters:
        - type: object
          mapping: $.
      - method: PATCH
        name: TopicsController_updateTopicSubscription
        description: Novu Update a Topic Subscription
        call: novu-topics.TopicsController_updateTopicSubscription
        with:
          topicKey: rest.topicKey
          identifier: rest.identifier
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
  - type: mcp
    namespace: novu-topics-mcp
    port: 9090
    transport: http
    description: MCP adapter for Novu API — Topics. One tool per consumed operation, routed inline through this capability's consumes block.
    tools:
    - name: check-topic-subscriber
      description: Novu Check Topic Subscriber
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: novu-topics.TopicsV1Controller_getTopicSubscriber
      with:
        externalSubscriberId: tools.externalSubscriberId
        topicKey: tools.topicKey
      outputParameters:
      - type: object
        mapping: $.
    - name: list-all-topics
      description: Novu List All Topics
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: novu-topics.TopicsController_listTopics
      with:
        after: tools.after
        before: tools.before
        limit: tools.limit
        orderDirection: tools.orderDirection
        orderBy: tools.orderBy
        includeCursor: tools.includeCursor
        key: tools.key
        name: tools.name
      outputParameters:
      - type: object
        mapping: $.
    - name: create-topic
      description: Novu Create a Topic
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: novu-topics.TopicsController_upsertTopic
      with:
        failIfExists: tools.failIfExists
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: retrieve-topic
      description: Novu Retrieve a Topic
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: novu-topics.TopicsController_getTopic
      with:
        topicKey: tools.topicKey
      outputParameters:
      - type: object
        mapping: $.
    - name: update-topic
      description: Novu Update a Topic
      hints:
        readOnly: false
        destructive: false
        idempotent: true
      call: novu-topics.TopicsController_updateTopic
      with:
        topicKey: tools.topicKey
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: delete-topic
      description: Novu Delete a Topic
      hints:
        readOnly: false
        destructive: true
        idempotent: true
      call: novu-topics.TopicsController_deleteTopic
      with:
        topicKey: tools.topicKey
      outputParameters:
      - type: object
        mapping: $.
    - name: list-topic-subscriptions
      description: Novu List Topic Subscriptions
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: novu-topics.TopicsController_listTopicSubscriptions
      with:
        topicKey: tools.topicKey
        after: tools.after
        before: tools.before
        limit: tools.limit
        orderDirection: tools.orderDirection
        orderBy: tools.orderBy
        includeCursor: tools.includeCursor
        subscriberId: tools.subscriberId
        contextKeys: tools.contextKeys
      outputParameters:
      - type: object
        mapping: $.
    - name: create-topic-subscriptions
      description: Novu Create Topic Subscriptions
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: novu-topics.TopicsController_createTopicSubscriptions
      with:
        topicKey: tools.topicKey
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: delete-topic-subscriptions
      description: Novu Delete Topic Subscriptions
      hints:
        readOnly: false
        destructive: true
        idempotent: true
      call: novu-topics.TopicsController_deleteTopicSubscriptions
      with:
        topicKey: tools.topicKey
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: retrieve-topic-subscription
      description: Novu Retrieve a Topic Subscription
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: novu-topics.TopicsController_getTopicSubscription
      with:
        topicKey: tools.topicKey
        identifier: tools.identifier
      outputParameters:
      - type: object
        mapping: $.
    - name: update-topic-subscription
      description: Novu Update a Topic Subscription
      hints:
        readOnly: false
        destructive: false
        idempotent: true
      call: novu-topics.TopicsController_updateTopicSubscription
      with:
        topicKey: tools.topicKey
        identifier: tools.identifier
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.