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

# Get the revenue attribution report

> Returns the revenue overview with its trends, the revenue series over time, the split by channel and the top campaigns by revenue. Figures are drawn from recorded campaign conversions, so an organization that reports none comes back with zeros throughout. Requires the `analytics:read` scope.



## OpenAPI

````yaml /api-reference/openapi.json get /api/v1/user/reports/revenue-attribution
openapi: 3.0.0
info:
  title: Brudcast API
  version: 1.0.0
servers:
  - url: https://core-service.prod.brudcast.com
    description: Production
security: []
tags:
  - name: Analytics
    x-displayName: Analytics
  - name: Campaigns
    x-displayName: Campaigns
  - name: Contacts
    x-displayName: Contacts
  - name: Mailboxes
    x-displayName: Mailboxes
  - name: Messages
    x-displayName: Messages
  - name: Sender Identities
    x-displayName: Sender Identities
  - name: Sending Domains
    x-displayName: Sending Domains
  - name: Templates
    x-displayName: Templates
  - name: Webhooks
    x-displayName: Webhooks
paths:
  /api/v1/user/reports/revenue-attribution:
    get:
      tags:
        - Analytics
      summary: Get the revenue attribution report
      description: >-
        Returns the revenue overview with its trends, the revenue series over
        time, the split by channel and the top campaigns by revenue. Figures are
        drawn from recorded campaign conversions, so an organization that
        reports none comes back with zeros throughout. Requires the
        `analytics:read` scope.
      parameters:
        - in: header
          name: X-Organization-Id
          required: false
          description: >-
            Required when authenticating with an access token. Optional with an
            API key, whose own organization binding is authoritative; a value
            contradicting it is refused with 403.
          schema:
            type: string
            format: uuid
        - in: query
          name: from
          required: false
          schema:
            type: string
        - in: query
          name: to
          required: false
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportRevenueAttributionResponse'
        '401':
          description: The credential is missing, malformed, revoked or expired
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            The key lacks the scope the endpoint requires, or the organization
            does not match the credential
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: The payload or query string failed validation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
        '429':
          description: >-
            Rate limit exceeded; retry after the number of seconds in
            `retryAfter`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitErrorResponse'
      security:
        - apiKey: []
        - apiKeyBearer: []
components:
  schemas:
    ReportRevenueAttributionResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
        message:
          type: string
        data:
          $ref: '#/components/schemas/ReportRevenueAttribution'
      required:
        - success
        - message
        - data
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
          example: Resource not found
        code:
          type: string
          enum:
            - E_VALIDATION_ERROR
            - E_UNAUTHORIZED_ACCESS
            - E_UNAUTHORIZED
            - E_FORBIDDEN
            - E_INSUFFICIENT_SCOPE
            - E_ROW_NOT_FOUND
            - E_TOO_MANY_REQUESTS
            - E_BUSINESS_RULE_VIOLATION
            - E_CAMPAIGN_NOT_SENDABLE
            - INSUFFICIENT_CREDITS
            - SUBSCRIPTION_REQUIRED
          example: E_ROW_NOT_FOUND
      required:
        - success
        - message
        - code
    ValidationErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
          example: The payload is invalid
        code:
          type: string
          enum:
            - E_VALIDATION_ERROR
            - E_UNAUTHORIZED_ACCESS
            - E_UNAUTHORIZED
            - E_FORBIDDEN
            - E_INSUFFICIENT_SCOPE
            - E_ROW_NOT_FOUND
            - E_TOO_MANY_REQUESTS
            - E_BUSINESS_RULE_VIOLATION
            - E_CAMPAIGN_NOT_SENDABLE
            - INSUFFICIENT_CREDITS
            - SUBSCRIPTION_REQUIRED
          example: E_VALIDATION_ERROR
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ValidationErrorItem'
      required:
        - success
        - message
        - code
        - errors
    RateLimitErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
          example: Too many requests
        code:
          type: string
          enum:
            - E_VALIDATION_ERROR
            - E_UNAUTHORIZED_ACCESS
            - E_UNAUTHORIZED
            - E_FORBIDDEN
            - E_INSUFFICIENT_SCOPE
            - E_ROW_NOT_FOUND
            - E_TOO_MANY_REQUESTS
            - E_BUSINESS_RULE_VIOLATION
            - E_CAMPAIGN_NOT_SENDABLE
            - INSUFFICIENT_CREDITS
            - SUBSCRIPTION_REQUIRED
          example: E_TOO_MANY_REQUESTS
        retryAfter:
          type: number
          example: 60
      required:
        - success
        - message
        - code
        - retryAfter
    ReportRevenueAttribution:
      type: object
      properties:
        overview:
          $ref: '#/components/schemas/ReportRevenueOverview'
        trend:
          type: array
          items:
            $ref: '#/components/schemas/ReportRevenuePoint'
        byChannel:
          type: array
          items:
            $ref: '#/components/schemas/ReportRevenueByChannel'
        topCampaigns:
          type: array
          items:
            $ref: '#/components/schemas/ReportTopCampaignByRevenue'
      required:
        - overview
        - trend
        - byChannel
        - topCampaigns
    ValidationErrorItem:
      type: object
      properties:
        field:
          type: string
          example: emailAddress
        rule:
          type: string
          example: email
        message:
          type: string
          example: The emailAddress field must be a valid email address
      required:
        - field
        - rule
        - message
    ReportRevenueOverview:
      type: object
      properties:
        totalRevenue:
          type: number
        totalConversions:
          type: number
        avgOrderValue:
          type: number
        revenuePerEmail:
          type: number
        trends:
          $ref: '#/components/schemas/ReportRevenueTrends'
      required:
        - totalRevenue
        - totalConversions
        - avgOrderValue
        - revenuePerEmail
        - trends
    ReportRevenuePoint:
      type: object
      properties:
        date:
          type: string
          format: date
          example: '2026-07-01T00:00:00.000Z'
        revenue:
          type: number
      required:
        - date
        - revenue
    ReportRevenueByChannel:
      type: object
      properties:
        channel:
          type: string
          enum:
            - email
            - sms
            - whatsapp
            - push
        revenue:
          type: number
      required:
        - channel
        - revenue
    ReportTopCampaignByRevenue:
      type: object
      properties:
        name:
          type: string
        revenue:
          type: number
        conversions:
          type: number
        avgOrderValue:
          type: number
        conversionRate:
          type: number
      required:
        - name
        - revenue
        - conversions
        - avgOrderValue
        - conversionRate
    ReportRevenueTrends:
      type: object
      properties:
        revenue:
          $ref: '#/components/schemas/ReportTrend'
        conversions:
          $ref: '#/components/schemas/ReportTrend'
      required:
        - revenue
        - conversions
    ReportTrend:
      type: object
      properties:
        direction:
          type: string
          enum:
            - up
            - down
            - flat
            - new
          description: How the figure moved against the preceding period of equal length
        value:
          type: number
          example: 12.5
          description: Magnitude of the change, as a percentage
      required:
        - direction
        - value
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        An organization API key, prefixed `bk_live_`. Takes precedence over
        `Authorization` when both are sent. The key is bound to one
        organization, and the scopes it was issued with are enforced per
        endpoint.
    apiKeyBearer:
      type: http
      scheme: bearer
      bearerFormat: bk_live_...
      description: >-
        The same organization API key sent as `Authorization: Bearer
        bk_live_...`. Accepted only when the value begins with `bk_` and no
        `X-API-Key` header is present.

````