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

# Analytics summary

> Returns the acting user's call counts for a range of calendar days. "Connected" and "conversation" use the same definitions as the PowerDialer dashboard. The range may cover at most 366 days; impossible dates answer `400`.



## OpenAPI

````yaml GET /analytics/summary
openapi: 3.0.3
info:
  title: PowerDialer Public API
  version: '1.0'
  description: >-
    Manage PowerDialer contact lists and read a user's call analytics
    server-to-server.


    Every request carries the shared API key (`Authorization: Bearer <key>` or
    `x-api-key: <key>`) and the PowerDialer user it acts for (`x-user-email` or
    `x-user-id`). Reads and writes are limited to lists that user owns;
    analytics are that user's own.


    Rate limit: 300 requests per minute per API key, across all users.
servers:
  - url: https://api.migration.powerdialer.ai/api/public/v1
    description: Production
security:
  - bearerAuth: []
  - apiKeyHeader: []
tags:
  - name: Contact lists
    description: Create, update and delete lists.
  - name: Contacts
    description: Add and remove contacts in a list.
  - name: Analytics
    description: The acting user's call analytics.
paths:
  /analytics/summary:
    get:
      tags:
        - Analytics
      summary: Analytics summary
      description: >-
        Returns the acting user's call counts for a range of calendar days.
        "Connected" and "conversation" use the same definitions as the
        PowerDialer dashboard. The range may cover at most 366 days; impossible
        dates answer `400`.
      operationId: getAnalyticsSummary
      parameters:
        - $ref: '#/components/parameters/UserEmail'
        - $ref: '#/components/parameters/UserId'
        - name: startDate
          in: query
          description: >-
            Inclusive calendar day in `timezone`, `YYYY-MM-DD`. Default: 6 days
            before `endDate`.
          schema:
            type: string
            format: date
            example: '2026-10-01'
        - name: endDate
          in: query
          description: >-
            Inclusive calendar day in `timezone`, `YYYY-MM-DD`. Default: today
            in `timezone`. Must not be before `startDate`.
          schema:
            type: string
            format: date
            example: '2026-10-07'
        - name: timezone
          in: query
          description: IANA time zone used to count days. Default `UTC`.
          schema:
            type: string
            example: America/New_York
            default: UTC
        - name: conversationThresholdSeconds
          in: query
          description: >-
            Minimum talk time for a call to count as a conversation. Default:
            the user's saved setting (120 if none).
          schema:
            type: integer
            minimum: 1
            maximum: 3600
            example: 120
      responses:
        '200':
          description: Summary
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalyticsSummary'
              example:
                userId: user_2abc...
                range:
                  startDate: '2026-10-01'
                  endDate: '2026-10-07'
                  timezone: America/New_York
                  from: '2026-10-01T04:00:00.000Z'
                  to: '2026-10-08T04:00:00.000Z'
                conversationThresholdSeconds: 120
                calls:
                  total: 184
                  outbound: 181
                  inbound: 3
                  connected: 41
                  conversations: 12
                  voicemails: 57
                  noAnswer: 72
                  busy: 4
                  failed: 2
                  canceled: 1
                rates:
                  connectRate: 0.2228
                  conversationRate: 0.0652
                talkTimeSeconds: 5310
                byStatus:
                  Accepted: 41
                  Voicemail: 57
                  No answer: 72
                  Busy: 4
                  Failed: 2
                  Canceled: 1
                  Completed: 7
                dispositions:
                  Positive: 9
                  Negative: 14
                  Callback: 6
                  NotDisposed: 155
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/UserNotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  parameters:
    UserEmail:
      name: x-user-email
      in: header
      required: false
      description: >-
        Login email of the PowerDialer user the request acts for. Send this or
        `x-user-id`; if both are sent, `x-user-id` wins.
      schema:
        type: string
        format: email
        example: rep@company.com
    UserId:
      name: x-user-id
      in: header
      required: false
      description: >-
        Clerk user id of the PowerDialer user the request acts for. Send this or
        `x-user-email`.
      schema:
        type: string
        example: user_2abc...
  schemas:
    AnalyticsSummary:
      type: object
      properties:
        userId:
          type: string
          example: user_2abc...
        range:
          type: object
          properties:
            startDate:
              type: string
              format: date
            endDate:
              type: string
              format: date
            timezone:
              type: string
            from:
              type: string
              format: date-time
              description: Exact start instant queried.
            to:
              type: string
              format: date-time
              description: Exact end instant queried, exclusive.
        conversationThresholdSeconds:
          type: integer
        calls:
          type: object
          properties:
            total:
              type: integer
              description: Every call record in the range, all directions.
            outbound:
              type: integer
            inbound:
              type: integer
            connected:
              type: integer
              description: Calls a person answered (dashboard definition).
            conversations:
              type: integer
              description: Connected calls with talk time at or above the threshold.
            voicemails:
              type: integer
            noAnswer:
              type: integer
            busy:
              type: integer
            failed:
              type: integer
            canceled:
              type: integer
        rates:
          type: object
          properties:
            connectRate:
              type: number
              description: '`connected / total`, 0 to 1, four decimals.'
            conversationRate:
              type: number
              description: '`conversations / total`, 0 to 1, four decimals.'
        talkTimeSeconds:
          type: integer
          description: Sum of talk time across all calls.
        byStatus:
          type: object
          additionalProperties:
            type: integer
          description: Raw count per provider status.
        dispositions:
          type: object
          additionalProperties:
            type: integer
          description: Count per disposition; `NotDisposed` for calls without one.
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
        details:
          description: Optional. A string, or for validation errors a list of problems.
          oneOf:
            - type: string
            - type: array
              items:
                type: object
                properties:
                  path:
                    type: string
                  message:
                    type: string
  responses:
    BadRequest:
      description: >-
        Malformed body or query, unknown field, missing user header, impossible
        date.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Invalid request
            details:
              - path: contacts.0.phoneNumber
                message: phoneNumber is required
    Unauthorized:
      description: Missing or wrong API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Invalid API key
    UserNotFound:
      description: The user named in `x-user-email` / `x-user-id` does not exist.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: User not found
    RateLimited:
      description: More than 300 requests per minute for this API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Rate limit exceeded
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        `Authorization: Bearer <api key>`. The key is issued by PowerDialer and
        must stay on your server.
    apiKeyHeader:
      type: apiKey
      in: header
      name: x-api-key
      description: 'Alternative to the Authorization header: `x-api-key: <api key>`.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.