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

# Get email metrics

> Account-wide email performance over a date range, across both send paths: 1:1 messages and broadcasts. Per-broadcast numbers stay on `GET /broadcasts/{id}/stats`; this is the rollup.

Two metrics are source-specific, and blending them would misreport: `opened`, `clicked` and `unsubscribed` are broadcast-only (1:1 mail carries no open pixel or link rewriting by design), while `suppressed` is 1:1-only (a broadcast drops suppressed addresses before recipient rows exist). Group by `source` to see them apart.

Rates are computed over `sent`. Grouping by `broadcast` returns broadcast rows only; grouping by `inbox` returns message rows only.



## OpenAPI

````yaml /developer/api-reference/openapi.json get /email/metrics
openapi: 3.1.1
info:
  title: Crevio API V1
  version: 1.0.0
  description: >
    API for the Crevio creator platform — a multi-tenant SaaS for digital
    product sales.

    Uses snake_case keys following Stripe conventions. All resource IDs are
    string IDs (e.g., "prod_abc123").


    Authentication is a bearer token: `Authorization: Bearer $CREVIO_API_KEY`.

    List endpoints are cursor-paginated with `limit` and `starting_after`.

    Writes accept an `Idempotency-Key` header and are safe to retry.


    Every response carries IETF RateLimit headers (`RateLimit`,
    `RateLimit-Policy`) so a client can

    self-throttle, and `Retry-After` on a 429. The quota is 600 requests per
    minute per credential.


    The API is versioned in the URL path (`/v1`). Nothing is removed without
    in-band warning: a

    deprecated operation is marked `"deprecated": true` here and serves
    `Deprecation` (RFC 9745),

    `Sunset` (RFC 8594) and `Link; rel="deprecation"` headers for at least six
    months before it

    stops answering. See https://crevio.co/docs/developer/guides/versioning.
  contact:
    email: support@crevio.co
    name: Crevio Support
    url: https://crevio.co/docs
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  termsOfService: https://crevio.co/legal/terms-of-service
servers:
  - url: https://api.crevio.co/v1
    description: Production
security:
  - ApiKey: []
tags:
  - name: Account
    description: Current account information
  - name: Bots
    description: >-
      Named bot identities (persona, skills, toolsets) chats and tasks can run
      as
  - name: Analytics
    description: Account-wide business analytics
  - name: BlogCategories
    description: Blog post categories
  - name: BlogPosts
    description: Blog content management
  - name: Broadcasts
    description: One-to-many email sending
  - name: CheckoutLinks
    description: Shareable checkout links
  - name: CheckoutConfiguration
    description: Account-wide checkout settings
  - name: Checkouts
    description: Checkout session management
  - name: Customers
    description: Customer relationship management
  - name: Discounts
    description: Discount code management
  - name: Experiences
    description: Digital experiences (courses, communities, downloads)
  - name: Files
    description: File uploads and external media management
  - name: FormSubmissions
    description: Form submission management
  - name: FormationDocuments
    description: Documents generated for a formation
  - name: Formations
    description: Whitelabel business formation via doola Partner API
  - name: Forms
    description: Hosted forms that capture leads and submissions
  - name: Invoices
    description: Invoice creation, payment, and lifecycle management
  - name: LegalPages
    description: Terms, privacy and refund pages for the storefront
  - name: Me
    description: Current user profile
  - name: OrderItems
    description: Order line items
  - name: Orders
    description: Order history and details
  - name: PriceVariants
    description: Product pricing tiers
  - name: Products
    description: Digital product catalog
  - name: Refunds
    description: Refund management
  - name: Reviews
    description: Product reviews
  - name: Socials
    description: Social media management (accounts, posts, media).
  - name: Subscriptions
    description: Subscription lifecycle management (cancel, pause, resume)
  - name: Tags
    description: Customer tags
  - name: TaskRuns
    description: Individual execution records for AI tasks.
  - name: Tasks
    description: >-
      AI tasks — scheduled or event-triggered agentic work (cron, interval,
      once, immediate, event).
  - name: WebhookEndpoints
    description: Webhook endpoint management
  - name: WebhookEvents
    description: Webhook event delivery history
  - name: Leads
    description: Find, verify and enrich business leads (Hunter.io-backed).
  - name: Ads
    description: >-
      Paid advertising — campaigns, ad groups, ads, audiences, targeting, leads,
      conversions, and reports across Meta, Google, TikTok, LinkedIn, Pinterest,
      and X.
  - name: Domains
    description: Custom web domains for your sites.
  - name: Web
    description: >-
      Web search & scraping (search, read, map, crawl, extract, research),
      backed by Firecrawl.
  - name: Skills
    description: >-
      AI skills marketplace — search the catalog and install or uninstall skills
      for your account's agent.
  - name: Schedules
    description: Reusable availability schedules that back event types.
  - name: EventTypes
    x-displayName: Event Types
    description: Bookable services customers can schedule time on.
  - name: Bookings
    description: Reservations made against event types.
  - name: Connections
    description: Third-party app connections (connect, list, execute)
  - name: Approvals
    description: Human-in-the-loop approvals for gated actions
  - name: Logs
    description: Account activity log
  - name: Access
    description: Per-user access checks for gated resources
  - name: ApiKeys
    description: API key management
  - name: Audio
    description: AI audio generation
  - name: Calls
    description: Outbound phone calls placed by the account's agent
  - name: Chapters
    description: Course chapters
  - name: Deployments
    description: Site deployments and build logs
  - name: Email
    description: Inboxes, threads, messages, drafts and delivery events
  - name: Email Suppressions
    description: Addresses no send path will deliver to
  - name: EventSessions
    description: Scheduled sessions of an event experience
  - name: EventSources
    description: Third-party event sources that trigger tasks
  - name: Events
    description: Events an account can subscribe to
  - name: ForumPosts
    description: Posts inside a forum experience
  - name: Images
    description: AI image generation, editing and stock search
  - name: Jobs
    description: Long-running asynchronous jobs
  - name: Lessons
    description: Lessons inside a course chapter
  - name: LinkItems
    description: Links inside a link-in-bio experience
  - name: Phone Consents
    description: Recorded consent to place calls to a number
  - name: Phone Numbers
    description: Phone numbers provisioned for the account
  - name: Phone Suppressions
    description: Do-not-call entries
  - name: Sites
    description: AI-built sites — storefronts and web apps
  - name: Status
    description: API and account status
  - name: Topics
    description: Discussion topics inside a forum experience
  - name: Usage
    description: Credit usage and transaction history
  - name: Users
    description: Users of the account
  - name: Video
    description: AI video generation
  - name: Secrets
    description: Account-level environment variables shared across the account's sites
externalDocs:
  description: Crevio developer documentation
  url: https://crevio.co/docs/developer
paths:
  /email/metrics:
    get:
      tags:
        - Email
      summary: Get email metrics
      description: >-
        Account-wide email performance over a date range, across both send
        paths: 1:1 messages and broadcasts. Per-broadcast numbers stay on `GET
        /broadcasts/{id}/stats`; this is the rollup.


        Two metrics are source-specific, and blending them would misreport:
        `opened`, `clicked` and `unsubscribed` are broadcast-only (1:1 mail
        carries no open pixel or link rewriting by design), while `suppressed`
        is 1:1-only (a broadcast drops suppressed addresses before recipient
        rows exist). Group by `source` to see them apart.


        Rates are computed over `sent`. Grouping by `broadcast` returns
        broadcast rows only; grouping by `inbox` returns message rows only.
      operationId: getEmailMetrics
      parameters:
        - name: start_date
          in: query
          required: false
          description: >-
            Inclusive first day, `YYYY-MM-DD`. Defaults to 7 days before
            `end_date`.
          schema:
            type: string
            format: date
        - name: end_date
          in: query
          required: false
          description: Inclusive last day, `YYYY-MM-DD`. Defaults to today.
          schema:
            type: string
            format: date
        - name: group_by
          in: query
          required: false
          description: Dimension to break the range down by. Omit for totals only.
          schema:
            type: string
            enum:
              - period
              - source
              - broadcast
              - inbox
        - name: granularity
          in: query
          required: false
          description: Bucket size when `group_by=period`.
          schema:
            type: string
            enum:
              - hour
              - day
              - week
              - month
            default: day
        - name: source
          in: query
          required: false
          description: Restrict to one send path.
          schema:
            type: string
            enum:
              - all
              - broadcast
              - message
            default: all
        - name: timezone
          in: query
          required: false
          description: >-
            IANA timezone the day and period boundaries are computed in.
            Defaults to UTC.
          schema:
            type: string
      responses:
        '200':
          description: Email metrics for the range
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailMetrics'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - ApiKey: []
      x-codeSamples:
        - lang: typescript
          label: Typescript (SDK)
          source: |-
            import { Crevio } from "@crevio/sdk";

            const crevio = new Crevio({
              apiKey: process.env["CREVIO_API_KEY"] ?? "",
            });

            async function run() {
              const result = await crevio.emailMetrics.get();

              console.log(result);
            }

            run();
components:
  schemas:
    EmailMetrics:
      type: object
      properties:
        object:
          type: string
          enum:
            - email_metrics
        start_date:
          type: string
          format: date
        end_date:
          type: string
          format: date
        timezone:
          type: string
        source:
          type: string
          enum:
            - all
            - broadcast
            - message
        group_by:
          type:
            - string
            - 'null'
          enum:
            - period
            - source
            - broadcast
            - inbox
            - null
        granularity:
          type: string
          enum:
            - hour
            - day
            - week
            - month
          description: Present only when grouping by period.
        totals:
          type: object
          properties:
            sent:
              type: integer
            delivered:
              type: integer
            bounced:
              type: integer
            complained:
              type: integer
            failed:
              type: integer
            opened:
              type: integer
            clicked:
              type: integer
            unsubscribed:
              type: integer
            suppressed:
              type: integer
            delivery_rate:
              type: number
              format: float
            bounce_rate:
              type: number
              format: float
            complaint_rate:
              type: number
              format: float
            open_rate:
              type: number
              format: float
            click_rate:
              type: number
              format: float
            unsubscribe_rate:
              type: number
              format: float
          required:
            - sent
            - delivered
            - bounced
            - complained
            - failed
            - opened
            - clicked
            - unsubscribed
            - suppressed
            - delivery_rate
            - bounce_rate
            - complaint_rate
            - open_rate
            - click_rate
            - unsubscribe_rate
        data:
          type: array
          items:
            $ref: '#/components/schemas/EmailMetricsBucket'
          description: >-
            Per-group rows. Empty when `group_by` is omitted — `totals` is the
            whole answer.
      required:
        - object
        - start_date
        - end_date
        - timezone
        - source
        - totals
        - data
    EmailMetricsBucket:
      type: object
      description: One group's metrics. Carries whichever dimension key matches `group_by`.
      properties:
        period:
          type: string
          format: date-time
          description: Bucket start, when grouping by period.
        source:
          type: string
          enum:
            - broadcast
            - message
          description: Send path, when grouping by source.
        broadcast:
          type: string
          description: Broadcast id, when grouping by broadcast.
        inbox:
          type: string
          description: Inbox id, when grouping by inbox.
        sent:
          type: integer
        delivered:
          type: integer
        bounced:
          type: integer
        complained:
          type: integer
        failed:
          type: integer
        opened:
          type: integer
        clicked:
          type: integer
        unsubscribed:
          type: integer
        suppressed:
          type: integer
        delivery_rate:
          type: number
          format: float
        bounce_rate:
          type: number
          format: float
        complaint_rate:
          type: number
          format: float
        open_rate:
          type: number
          format: float
        click_rate:
          type: number
          format: float
        unsubscribe_rate:
          type: number
          format: float
      required:
        - sent
        - delivered
        - bounced
        - complained
        - failed
        - opened
        - clicked
        - unsubscribed
        - suppressed
        - delivery_rate
        - bounce_rate
        - complaint_rate
        - open_rate
        - click_rate
        - unsubscribe_rate
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            type:
              type: string
              enum:
                - api_error
                - invalid_request_error
                - validation_error
            code:
              type: string
            message:
              type: string
            param:
              type: string
            errors:
              type: object
          required:
            - type
            - message
      required:
        - error
  responses:
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              type: invalid_request_error
              code: bad_request
              message: The request was malformed or contained invalid parameters
      headers:
        RateLimit:
          $ref: '#/components/headers/RateLimit'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimitPolicy'
        Request-Id:
          $ref: '#/components/headers/RequestId'
        Deprecation:
          $ref: '#/components/headers/Deprecation'
        Sunset:
          $ref: '#/components/headers/Sunset'
        Link:
          $ref: '#/components/headers/DeprecationLink'
    Unauthorized:
      description: Authentication required
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              type: invalid_request_error
              code: authentication_required
              message: You did not provide an API key.
      headers:
        RateLimit:
          $ref: '#/components/headers/RateLimit'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimitPolicy'
        Request-Id:
          $ref: '#/components/headers/RequestId'
        Deprecation:
          $ref: '#/components/headers/Deprecation'
        Sunset:
          $ref: '#/components/headers/Sunset'
        Link:
          $ref: '#/components/headers/DeprecationLink'
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              type: invalid_request_error
              code: forbidden
              message: You do not have permission to perform this action
      headers:
        RateLimit:
          $ref: '#/components/headers/RateLimit'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimitPolicy'
        Request-Id:
          $ref: '#/components/headers/RequestId'
        Deprecation:
          $ref: '#/components/headers/Deprecation'
        Sunset:
          $ref: '#/components/headers/Sunset'
        Link:
          $ref: '#/components/headers/DeprecationLink'
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              type: invalid_request_error
              code: resource_missing
              message: The requested resource was not found
      headers:
        RateLimit:
          $ref: '#/components/headers/RateLimit'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimitPolicy'
        Request-Id:
          $ref: '#/components/headers/RequestId'
        Deprecation:
          $ref: '#/components/headers/Deprecation'
        Sunset:
          $ref: '#/components/headers/Sunset'
        Link:
          $ref: '#/components/headers/DeprecationLink'
    UnprocessableEntity:
      description: Validation error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              type: validation_error
              code: validation_failed
              message: Email is required
              errors:
                email:
                  - can't be blank
      headers:
        RateLimit:
          $ref: '#/components/headers/RateLimit'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimitPolicy'
        Request-Id:
          $ref: '#/components/headers/RequestId'
        Deprecation:
          $ref: '#/components/headers/Deprecation'
        Sunset:
          $ref: '#/components/headers/Sunset'
        Link:
          $ref: '#/components/headers/DeprecationLink'
    TooManyRequests:
      description: >-
        Rate limit exceeded — 600 requests per minute per credential. Retry
        after the number of seconds in `Retry-After`.
      headers:
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
        RateLimit:
          $ref: '#/components/headers/RateLimit'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimitPolicy'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              type: invalid_request_error
              code: rate_limit_exceeded
              message: Too many requests. Please retry later.
    InternalServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              type: api_error
              code: internal_error
              message: An unexpected error occurred
      headers:
        RateLimit:
          $ref: '#/components/headers/RateLimit'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimitPolicy'
        Request-Id:
          $ref: '#/components/headers/RequestId'
        Deprecation:
          $ref: '#/components/headers/Deprecation'
        Sunset:
          $ref: '#/components/headers/Sunset'
        Link:
          $ref: '#/components/headers/DeprecationLink'
  headers:
    RateLimit:
      description: >-
        Remaining quota for the current window, as an IETF structured field:
        `"default";r=<remaining>;t=<seconds until reset>`.
      schema:
        type: string
        examples:
          - '"default";r=596;t=11'
    RateLimitPolicy:
      description: >-
        The quota this credential is subject to:
        `"default";q=<requests>;w=<window seconds>`.
      schema:
        type: string
        examples:
          - '"default";q=600;w=60'
    RequestId:
      description: Unique id for this request. Quote it when reporting a problem.
      schema:
        type: string
        examples:
          - 8fe045fe-cb8a-4407-a44d-5df60385e522
    Deprecation:
      description: >-
        Present only on a deprecated operation. Structured-field date (RFC 9745)
        — `@` followed by the Unix timestamp at which the operation became
        deprecated.
      schema:
        type: string
        examples:
          - '@1775001600'
    Sunset:
      description: >-
        Present only on a deprecated operation. HTTP-date (RFC 8594) after which
        the operation stops responding. Always at least six months after
        `Deprecation`.
      schema:
        type: string
        examples:
          - Thu, 01 Oct 2026 00:00:00 GMT
    DeprecationLink:
      description: >-
        Present only on a deprecated operation. `<url>; rel="deprecation"`
        pointing at the migration notes.
      schema:
        type: string
        examples:
          - >-
            <https://crevio.co/docs/developer/guides/versioning>;
            rel="deprecation"
    RetryAfter:
      description: Seconds to wait before retrying.
      schema:
        type: integer
        examples:
          - 11
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: Authorization
      description: 'API key in the format: Bearer {api_token}'

````