> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apollodeploy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get topic engagement analytics

> Returns delivery and engagement performance for one topic over the selected time window. API-key authentication always uses the key's project; `projectId` is only needed for dashboard-session authentication.

### Requirements

- **Permission:** `emails:send` or `emails:read` or `metrics:read`.
- **HTTP rate limit:** 120 requests per 60 seconds per API key.



## OpenAPI

````yaml /signal/api-reference/openapi.json get /v1/metrics/topics/{id}
openapi: 3.1.0
info:
  title: Apollo Signal API
  version: 1.0.0
  description: >-
    Public REST API for transactional email, contacts, audiences, webhooks,
    metrics, projects, and sending domains.
servers:
  - url: https://api.signal.apollodeploy.com
    description: Production
security: []
tags:
  - name: Emails
    description: Send, inspect, cancel, validate, and stream transactional email activity.
  - name: Metrics
    description: Read project, topic, message, and deliverability analytics.
  - name: Suppressions
    description: Manage addresses that Apollo Signal must not send to.
  - name: Segments
    description: Create dynamic contact groups and inspect their membership.
  - name: Topics
    description: Manage subscription topics and topic membership.
  - name: Contact properties
    description: Define the custom fields available on project contacts.
  - name: Contacts
    description: >-
      Manage contacts, audience membership, images, activity, and engagement
      data.
  - name: Webhooks
    description: Manage webhook endpoints, deliveries, tests, and replays.
  - name: API key usage
    description: Inspect API key metadata and request usage without exposing raw keys.
  - name: Projects
    description: Inspect projects and project-scoped email logs.
  - name: Sending domains
    description: >-
      Register, verify, inspect, and remove sending domains and BIMI
      configuration.
paths:
  /v1/metrics/topics/{id}:
    get:
      tags:
        - Metrics
      summary: Get topic engagement analytics
      description: >-
        Returns delivery and engagement performance for one topic over the
        selected time window. API-key authentication always uses the key's
        project; `projectId` is only needed for dashboard-session
        authentication.


        ### Requirements


        - **Permission:** `emails:send` or `emails:read` or `metrics:read`.

        - **HTTP rate limit:** 120 requests per 60 seconds per API key.
      operationId: getTopicPerformance
      parameters:
        - name: id
          in: path
          required: true
          deprecated: false
          explode: false
          schema:
            type: string
            title: String
          description: Topic identifier.
        - name: window
          in: query
          description: 'Time window: `24h`, `7d`, `30d` (default), `90d`.'
          required: false
          deprecated: false
          explode: false
          schema:
            type: string
            title: String
        - name: projectId
          in: query
          description: Required for session auth; ignored for API key auth.
          required: false
          deprecated: false
          explode: false
          schema:
            type: string
            title: String
      responses:
        '200':
          headers: {}
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.signal.feature.metrics.api.model.TopicPerformanceResponse
          description: Request completed successfully.
        '401':
          headers: {}
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.commons.core.error.ApiProblem
          description: >-
            The API key or stream token is missing, invalid, expired, or
            inactive.
        '403':
          description: >-
            The credential lacks the required permission or cannot access this
            project.
          headers: {}
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.commons.core.error.ApiProblem
        '404':
          headers: {}
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.commons.core.error.ApiProblem
          description: The requested resource was not found in the authenticated project.
        '429':
          description: >-
            The endpoint rate limit was exceeded. Wait for the `Retry-After`
            interval before retrying.
          headers:
            Retry-After:
              description: Whole seconds to wait before retrying.
              schema:
                type: integer
                minimum: 1
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.commons.core.error.ApiProblem
      deprecated: false
      security:
        - bearerAuth: []
components:
  schemas:
    com.apollodeploy.signal.feature.metrics.api.model.TopicPerformanceResponse:
      type: object
      properties:
        avgReadTimeSeconds:
          type: number
          format: double
          title: Double
        bounceRate:
          type: number
          format: double
          title: Double
        bounced:
          type: integer
          format: int32
          title: Int
        clickRate:
          type: number
          format: double
          title: Double
        clicked:
          type: integer
          format: int32
          title: Int
        complained:
          type: integer
          format: int32
          title: Int
        complaintRate:
          type: number
          format: double
          title: Double
        computedAt:
          type: string
          title: String
        delivered:
          type: integer
          format: int32
          title: Int
        deliveryRate:
          type: number
          format: double
          title: Double
        openRate:
          type: number
          format: double
          title: Double
        opened:
          type: integer
          format: int32
          title: Int
        optInCount:
          type: integer
          format: int64
          title: Long
        optOutCount:
          type: integer
          format: int64
          title: Long
        readEngaged:
          type: integer
          format: int32
          title: Int
        readEngagementRate:
          type: number
          format: double
          title: Double
        topicId:
          type: string
          title: String
        topicName:
          type: string
          title: String
        totalEmails:
          type: integer
          format: int32
          title: Int
        unsubscribeRate:
          type: number
          format: double
          title: Double
        unsubscribed:
          type: integer
          format: int32
          title: Int
        window:
          $ref: >-
            #/components/schemas/com.apollodeploy.signal.feature.metrics.api.model.MetricsWindowResponse
      required:
        - bounceRate
        - bounced
        - clickRate
        - clicked
        - complained
        - complaintRate
        - computedAt
        - delivered
        - deliveryRate
        - openRate
        - opened
        - optInCount
        - optOutCount
        - readEngaged
        - readEngagementRate
        - topicId
        - topicName
        - totalEmails
        - unsubscribeRate
        - unsubscribed
        - window
      title: TopicPerformanceResponse
    com.apollodeploy.commons.core.error.ApiProblem:
      type: object
      properties:
        code:
          type: string
          title: ErrorCode
        detail:
          type: string
          title: String
        errors:
          type: array
          items:
            $ref: >-
              #/components/schemas/com.apollodeploy.commons.core.error.FieldProblem
          title: List<FieldProblem>
        instance:
          type: string
          title: ProblemInstance
        requestId:
          type: string
          title: String
        status:
          type: integer
          format: int32
          title: Int
        title:
          type: string
          title: String
        type:
          type: string
          title: ProblemType
      required:
        - code
        - status
        - title
        - type
      title: ApiProblem
    com.apollodeploy.signal.feature.metrics.api.model.MetricsWindowResponse:
      type: object
      properties:
        from:
          type: string
          title: String
        label:
          type: string
          title: String
        to:
          type: string
          title: String
      required:
        - from
        - label
        - to
      title: MetricsWindowResponse
    com.apollodeploy.commons.core.error.FieldProblem:
      type: object
      properties:
        detail:
          type: string
          title: String
        pointer:
          type: string
          title: String
      required:
        - detail
        - pointer
      title: FieldProblem
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Project-bound Apollo Signal API key. Keys begin with `ap_signal_` and
        must carry the permission shown on the operation.

````