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

# Revenue by channel

> Monthly recurring revenue of matched customers, grouped by the channel (or named entity) they said they heard about you from, next to what first-touch/UTM data says.



## OpenAPI

````yaml /openapi.json get /v1/reports/mrr-by-channel
openapi: 3.1.0
info:
  title: Rumorly API
  version: 1.0.0
  description: >-
    Send "how did you hear about us?" answers in; get channels, named entities
    and revenue out. All JSON is snake_case.
servers:
  - url: https://api.rumorly.io
    description: Production
  - url: http://localhost:4100
    description: Local development
security: []
tags:
  - name: Basics
  - name: Responses
    description: Answers and their classification.
  - name: People
    description: The people who answered.
  - name: Reports
    description: Revenue by self-reported channel.
  - name: Snippet
    description: Endpoints the JS snippet calls.
paths:
  /v1/reports/mrr-by-channel:
    get:
      tags:
        - Reports
      summary: Revenue by channel
      description: >-
        Monthly recurring revenue of matched customers, grouped by the channel
        (or named entity) they said they heard about you from, next to what
        first-touch/UTM data says.
      parameters:
        - schema:
            type: string
            format: date
          required: false
          description: >-
            First day (inclusive), `YYYY-MM-DD`, by when answers were given.
            Default: 12 months ago.
          name: from
          in: query
        - schema:
            type: string
            format: date
          required: false
          description: 'Last day (inclusive), `YYYY-MM-DD`. Default: today.'
          name: to
          in: query
        - schema:
            type: string
            enum:
              - channel
              - entity
            default: channel
          required: false
          description: >-
            `channel` for one row per channel; `entity` for one row per named
            source (plus a `<slug>:none` row per channel).
          name: group_by
          in: query
        - schema:
            type: string
          required: false
          description: Only this channel's rows, by slug, e.g. `podcast`.
          example: podcast
          name: channel
          in: query
      responses:
        '200':
          description: The report.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MrrReport'
        '400':
          description: The body or query failed validation; `issues` says which field.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: >-
            `plan_required`: your plan doesn't include API access (Growth and
            up; the signup trial does). `quota_exceeded` (POST only): this
            month's response allowance is used up.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: >-
            The key is not allowed to do this (e.g. a publishable key reading
            data).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - secretKey: []
components:
  schemas:
    MrrReport:
      type: object
      properties:
        from:
          type: string
          format: date
        to:
          type: string
          format: date
        group_by:
          type: string
          enum:
            - channel
            - entity
        currency:
          type: string
          example: usd
        total_mrr_cents:
          type: integer
        matched_mrr_cents:
          type: integer
        unmatched_mrr_cents:
          type: integer
        unmatched_share:
          type: number
        paying_customers:
          type: integer
        responses:
          type: integer
        response_rate:
          type: number
        rows:
          type: array
          items:
            $ref: '#/components/schemas/ReportRow'
        trend:
          type: array
          items:
            type: object
            properties:
              month:
                type: string
                example: 2026-09
              values:
                type: object
                additionalProperties:
                  type: integer
            required:
              - month
              - values
        headline:
          type:
            - string
            - 'null'
      required:
        - from
        - to
        - group_by
        - currency
        - total_mrr_cents
        - matched_mrr_cents
        - unmatched_mrr_cents
        - unmatched_share
        - paying_customers
        - responses
        - response_rate
        - rows
        - trend
        - headline
      description: Example values are illustrative.
      example:
        from: '2025-10-22'
        to: '2026-10-22'
        group_by: channel
        currency: usd
        total_mrr_cents: 3970000
        matched_mrr_cents: 3490000
        unmatched_mrr_cents: 480000
        unmatched_share: 0.12
        paying_customers: 131
        responses: 444
        response_rate: 0.85
        rows:
          - key: ai_assistant
            label: AI assistant
            channel: null
            responses: 96
            customers: 34
            mrr_cents: 1200200
            mrr_share: 0.34
            first_touch_customers: 5
            first_touch_mrr_cents: 89500
            conversion_rate: 0.35
        trend:
          - month: 2026-09
            values:
              ai_assistant: 1104000
        headline: >-
          AI assistants brought in 34 customers worth $12,002 a month. Your
          analytics only gave it credit for 5.
    Error:
      type: object
      properties:
        error:
          type: string
          example: invalid body
        code:
          type: string
        issues:
          type: array
          items:
            type: object
            properties:
              path:
                type: array
                items:
                  anyOf:
                    - type: string
                    - type: number
              message:
                type: string
            required:
              - path
              - message
      required:
        - error
    ReportRow:
      type: object
      properties:
        key:
          type: string
        label:
          type: string
        channel:
          type:
            - string
            - 'null'
        responses:
          type: integer
        customers:
          type: integer
        mrr_cents:
          type: integer
        mrr_share:
          type: number
        first_touch_customers:
          type: integer
        first_touch_mrr_cents:
          type: integer
        conversion_rate:
          type: number
      required:
        - key
        - label
        - channel
        - responses
        - customers
        - mrr_cents
        - mrr_share
        - first_touch_customers
        - first_touch_mrr_cents
        - conversion_rate
  securitySchemes:
    secretKey:
      type: http
      scheme: bearer
      description: >-
        A secret key (`sk_live_…` / `sk_test_…`) from Settings → API keys.
        Server-side only.

````

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