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

# List Campaign Spend

> Most-recent-first listing of the append-only spend ledger.

Limit defaults to 200 — the budget panel renders a recent-activity
timeline, not the entire history. Reconciliation back-fill jobs read
the ledger directly via the model, not this endpoint.



## OpenAPI

````yaml get /opportunity/campaign/{campaign_id}/spend
openapi: 3.1.0
info:
  title: Decoda API
  description: External API documentation for the Decoda Health platform.
  version: '1.0'
servers: []
security: []
paths:
  /opportunity/campaign/{campaign_id}/spend:
    get:
      tags:
        - Campaigns
      summary: List Campaign Spend
      description: |-
        Most-recent-first listing of the append-only spend ledger.

        Limit defaults to 200 — the budget panel renders a recent-activity
        timeline, not the entire history. Reconciliation back-fill jobs read
        the ledger directly via the model, not this endpoint.
      operationId: list_campaign_spend_opportunity_campaign__campaign_id__spend_get
      parameters:
        - name: TENANT
          in: header
          required: true
          schema:
            type: string
            title: Tenant
          description: The tenant you are making this request on behalf of
        - name: API-KEY
          in: header
          required: true
          schema:
            type: string
            title: Api-Key
          description: Your api key
        - name: campaign_id
          in: path
          required: true
          schema:
            type: string
            title: Campaign Id
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 200
            title: Limit
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CampaignSpendLedgerEntry'
                title: >-
                  Response List Campaign Spend Opportunity Campaign  Campaign
                  Id  Spend Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    CampaignSpendLedgerEntry:
      properties:
        id:
          type: string
          title: Id
        campaignId:
          type: string
          title: Campaignid
        source:
          $ref: '#/components/schemas/SpendSource'
        amountCents:
          type: integer
          title: Amountcents
        occurredAt:
          type: string
          format: date-time
          title: Occurredat
        externalRef:
          anyOf:
            - type: string
            - type: 'null'
          title: Externalref
        createdDate:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Createddate
      type: object
      required:
        - id
        - campaignId
        - source
        - amountCents
        - occurredAt
      title: CampaignSpendLedgerEntry
      description: |-
        One append-only spend delta. The ledger is write-only via reconciler
        and effects; the API surface is read-only ordered listing.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    SpendSource:
      type: string
      enum:
        - META
        - GOOGLE
        - TIKTOK
        - SMS
        - EMAIL
        - CALL
        - MANUAL
      title: SpendSource
      description: |-
        Where a `CampaignSpendLedger` row's amount came from.

        Ad-platform values are reconciled by `BudgetReconciler` polling each
        `PlatformAdapter.fetch_spend_since`. Channel values
        (SMS/EMAIL/CALL) are posted by the runner when an action sends a
        message. MANUAL is for user-entered adjustments.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError

````