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

# Page jobs with complete saved sold and earned credits

> One resource per owned job, including empty credit arrays and undated jobs. Orders by job ID ascending. Member and credit-type filters must match the same credit to select a job; the returned array stays complete. Amounts preserve explicit recorded credits, including zero and negative values. No inferred attribution, save timestamp or updated_since.



## OpenAPI

````yaml /openapi.json get /revenue-attributions
openapi: 3.0.3
info:
  title: Breezy Public Reporting API
  version: 1.0.0
  description: >-
    Read customers, team members, jobs, visits, assignments, installed
    equipment, captured form responses, time entries, configured-period
    timesheets, business reference catalogs, job leads, estimates, invoices,
    payments, refunds, recorded job financials, saved sold/earned credits, and
    financial summaries for your company. Existing API keys grant company-wide
    read access. Amounts are integer USD cents. Reads return current corrected
    records, with cursor pagination for collecting results.


    Read the [Breezy FSM guides](https://developers.getbreezyapp.com) for
    authentication, pagination, refresh limits, and business measures. All reads
    use latest corrected company records; cursors do not create a snapshot or a
    complete change feed.
servers:
  - url: https://api.getbreezyapp.com/v1
    description: Breezy FSM production API
security:
  - apiKey: []
tags:
  - name: Company
  - name: Invoices
  - name: Payments
  - name: Refunds
  - name: Reports
  - name: TeamMembers
  - name: Accounts
  - name: Contacts
  - name: Locations
  - name: Jobs
  - name: JobAppointments
  - name: JobAssignments
  - name: BusinessUnits
  - name: JobTypes
  - name: JobClasses
  - name: JobLifecycles
  - name: LeadSources
  - name: Tags
  - name: Estimates
  - name: JobLeads
  - name: Equipment
  - name: FormResponses
  - name: TimeEntries
  - name: Timesheets
  - name: JobFinancials
  - name: RevenueAttributions
externalDocs:
  description: Breezy FSM reporting guides and API reference
  url: https://developers.getbreezyapp.com
paths:
  /revenue-attributions:
    get:
      tags:
        - RevenueAttributions
      summary: Page jobs with complete saved sold and earned credits
      description: >-
        One resource per owned job, including empty credit arrays and undated
        jobs. Orders by job ID ascending. Member and credit-type filters must
        match the same credit to select a job; the returned array stays
        complete. Amounts preserve explicit recorded credits, including zero and
        negative values. No inferred attribution, save timestamp or
        updated_since.
      operationId: listRevenueAttributions
      parameters:
        - schema:
            type: array
            nullable: true
            items:
              type: string
              format: uuid
            minItems: 1
            maxItems: 100
            default: null
            description: >-
              Repeat ids for a bounded ID set. Valid foreign or missing IDs
              contribute no list rows.
          required: false
          style: form
          explode: true
          name: ids
          in: query
        - schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 50
            description: >-
              Maximum parent records or report rows. Complete children are
              always included.
          required: false
          description: >-
            Maximum parent records or report rows. Complete children are always
            included.
          name: limit
          in: query
        - schema:
            type: string
            nullable: true
            minLength: 1
            default: null
            description: >-
              Repeat the original filters; any valid page size may continue.
              Foreign-company, tampered or mismatched cursors return
              INVALID_CURSOR.
          required: false
          description: >-
            Repeat the original filters; any valid page size may continue.
            Foreign-company, tampered or mismatched cursors return
            INVALID_CURSOR.
          name: cursor
          in: query
        - schema:
            type: string
            nullable: true
            format: date-time
            default: null
            description: Inclusive creation instant.
          required: false
          description: Inclusive creation instant.
          name: created_from
          in: query
        - schema:
            type: string
            nullable: true
            format: date-time
            default: null
            description: Exclusive creation instant.
          required: false
          description: Exclusive creation instant.
          name: created_before
          in: query
        - schema:
            type: string
            nullable: true
            format: uuid
            default: null
          required: false
          name: account_id
          in: query
        - schema:
            type: string
            nullable: true
            format: uuid
            default: null
          required: false
          name: business_unit_id
          in: query
        - schema:
            type: string
            nullable: true
            format: uuid
            default: null
          required: false
          name: job_type_id
          in: query
        - schema:
            type: string
            nullable: true
            enum:
              - SERVICE
              - MAINTENANCE
              - ESTIMATE_REPAIR
              - ESTIMATE_REPLACE
              - INSTALL
              - WARRANTY
              - CALLBACK
              - SALES
              - UNKNOWN
              - null
          required: false
          name: job_class
          in: query
        - schema:
            type: string
            nullable: true
            format: uuid
            default: null
            description: A currently validated credited company member.
          required: false
          description: A currently validated credited company member.
          name: team_member_id
          in: query
        - schema:
            type: string
            nullable: true
            enum:
              - SOLD
              - EARNED
              - null
          required: false
          name: credit_type
          in: query
        - schema:
            type: string
            nullable: true
            format: uuid
            default: null
          required: false
          name: location_id
          in: query
        - schema:
            type: string
            nullable: true
            format: date
            default: null
            description: Inclusive company-local work-completion date.
          required: false
          description: Inclusive company-local work-completion date.
          name: report_from
          in: query
        - schema:
            type: string
            nullable: true
            format: date
            default: null
            description: Exclusive company-local work-completion date.
          required: false
          description: Exclusive company-local work-completion date.
          name: report_before
          in: query
      responses:
        '200':
          description: Successful read. Clients ignore unrecognized response fields.
          headers:
            Cache-Control:
              schema:
                type: string
              example: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevenueAttributionsPage'
              example:
                data:
                  - id: 11111111-1111-4111-8111-000000000501
                    number: '200'
                    account:
                      id: 11111111-1111-4111-8111-000000000101
                      name: Example Household
                    location_id: 11111111-1111-4111-8111-000000001107
                    business_unit:
                      id: 11111111-1111-4111-8111-000000000201
                      name: Service
                    job_type:
                      id: 11111111-1111-4111-8111-000000000301
                      name: HVAC Service
                    job_class: SERVICE
                    created_at: '2026-08-19T16:00:00Z'
                    work_completed_at: '2026-08-20T15:00:00Z'
                    report_date: '2026-08-20'
                    currency: USD
                    credits:
                      - credit_type: SOLD
                        revenue_cents: 100000
                        team_member:
                          id: 11111111-1111-4111-8111-000000000401
                          name: Alex Example
                        invoice:
                          id: 11111111-1111-4111-8111-000000000601
                          number: '1001'
                        invoice_line_item_ids:
                          - 11111111-1111-4111-8111-000000000901
                      - credit_type: EARNED
                        revenue_cents: 100000
                        team_member:
                          id: 11111111-1111-4111-8111-000000000401
                          name: Alex Example
                        invoice:
                          id: 11111111-1111-4111-8111-000000000601
                          number: '1001'
                        invoice_line_item_ids:
                          - 11111111-1111-4111-8111-000000000901
                      - credit_type: SOLD
                        revenue_cents: 0
                        team_member: null
                        invoice: null
                        invoice_line_item_ids: []
                pagination:
                  next_cursor: null
                meta:
                  request_id: 11111111-1111-4111-8111-000000009999
                  generated_at: '2026-09-08T19:00:00Z'
                  timezone: America/Los_Angeles
        '400':
          description: >-
            Malformed input, unknown query parameter, unsupported combination or
            invalid cursor.
          headers:
            Cache-Control:
              schema:
                type: string
              example: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: INVALID_REQUEST
                  message: end_date must be later than start_date
                  request_id: example-request
                  details: []
        '401':
          description: Missing, invalid or expired key, or invalid linked identity.
          headers:
            Cache-Control:
              schema:
                type: string
              example: private, no-store
            WWW-Authenticate:
              schema:
                type: string
              example: Bearer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: UNAUTHENTICATED
                  message: A valid API key is required
                  request_id: example-request
                  details: []
        '404':
          description: >-
            Missing resource or resource outside the authenticated company. Same
            response for both.
          headers:
            Cache-Control:
              schema:
                type: string
              example: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: NOT_FOUND
                  message: Resource not found
                  request_id: example-request
                  details: []
        '405':
          description: Write methods do not mutate business data and return 405.
          headers:
            Cache-Control:
              schema:
                type: string
              example: private, no-store
            Allow:
              schema:
                type: string
              example: GET, HEAD, OPTIONS
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: METHOD_NOT_ALLOWED
                  message: This resource supports GET
                  request_id: example-request
                  details: []
        '429':
          description: Company request budget exhausted; retry after the indicated delay.
          headers:
            Cache-Control:
              schema:
                type: string
              example: private, no-store
            Retry-After:
              schema:
                type: integer
                minimum: 1
              description: Seconds before retrying.
              example: 30
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: RATE_LIMITED
                  message: Request limit exceeded
                  request_id: example-request
                  details: []
        '500':
          description: >-
            Unexpected failure. Share request_id with support; no stack or
            provider secrets in response.
          headers:
            Cache-Control:
              schema:
                type: string
              example: private, no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: INTERNAL_ERROR
                  message: Unable to complete request
                  request_id: example-request
                  details: []
      security:
        - apiKey: []
components:
  schemas:
    RevenueAttributionsPage:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/RevenueAttributions'
        pagination:
          $ref: '#/components/schemas/Pagination'
        meta:
          $ref: '#/components/schemas/ResponseMeta'
      required:
        - data
        - pagination
        - meta
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - INVALID_REQUEST
                - INVALID_CURSOR
                - UNAUTHENTICATED
                - NOT_FOUND
                - METHOD_NOT_ALLOWED
                - RATE_LIMITED
                - INTERNAL_ERROR
            message:
              type: string
            request_id:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  field:
                    type: string
                  message:
                    type: string
                required:
                  - field
                  - message
          required:
            - code
            - message
            - request_id
            - details
      required:
        - error
    RevenueAttributions:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: >-
            Job ID. Replace this job’s complete credit array when refreshing it;
            credits have no public row IDs.
        number:
          type: string
        account:
          $ref: '#/components/schemas/Reference'
        location_id:
          type: string
          nullable: true
          format: uuid
        business_unit:
          $ref: '#/components/schemas/NullableReference'
        job_type:
          $ref: '#/components/schemas/NullableReference'
        job_class:
          $ref: '#/components/schemas/NullableJobClass'
        created_at:
          type: string
          format: date-time
          description: Job creation time, not the time its credits were saved.
        work_completed_at:
          type: string
          nullable: true
          format: date-time
        report_date:
          type: string
          nullable: true
          format: date
          description: >-
            Company-local work-completion date, without fallback. Undated jobs
            remain readable but do not enter dated summaries.
        currency:
          type: string
          enum:
            - USD
        credits:
          type: array
          items:
            $ref: '#/components/schemas/RevenueCredit'
          description: >-
            Complete saved sold and earned credits. Empty means none recorded.
            Each member may receive the full amount independently, so credits
            overlap. Sold and earned are separate measures, not additive company
            revenue. Identical-looking credits with unavailable links remain
            separate.
      required:
        - id
        - number
        - account
        - location_id
        - business_unit
        - job_type
        - job_class
        - created_at
        - work_completed_at
        - report_date
        - currency
        - credits
    Pagination:
      type: object
      properties:
        next_cursor:
          type: string
          nullable: true
          description: >-
            Opaque continuation. Null ends traversal. Keep the same filters;
            page size may change.
      required:
        - next_cursor
    ResponseMeta:
      type: object
      properties:
        request_id:
          type: string
        generated_at:
          type: string
          format: date-time
        timezone:
          type: string
      required:
        - request_id
        - generated_at
        - timezone
      description: >-
        Generation time and company timezone. generated_at is not a snapshot or
        synchronization token.
    Reference:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
      required:
        - id
        - name
    NullableReference:
      type: object
      nullable: true
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
      required:
        - id
        - name
    NullableJobClass:
      type: string
      nullable: true
      enum:
        - SERVICE
        - MAINTENANCE
        - ESTIMATE_REPAIR
        - ESTIMATE_REPLACE
        - INSTALL
        - WARRANTY
        - CALLBACK
        - SALES
        - UNKNOWN
        - null
    RevenueCredit:
      type: object
      properties:
        credit_type:
          type: string
          enum:
            - SOLD
            - EARNED
        revenue_cents:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The saved signed credit, including zero. Never recalculated from
            current invoice lines or divided among people.
        team_member:
          allOf:
            - $ref: '#/components/schemas/NullableReference'
            - description: >-
                Current company member, including inactive and non-technician
                members; null if unavailable. The saved amount remains included.
        invoice:
          type: object
          nullable: true
          properties:
            id:
              type: string
              format: uuid
            number:
              type: string
          required:
            - id
            - number
          description: >-
            Currently owned invoice linked to this job with an owned account,
            regardless of status; null when unavailable.
        invoice_line_item_ids:
          type: array
          items:
            type: string
            format: uuid
          description: >-
            Current owned lines on the validated invoice matching the saved
            cart-item key or owned original pricebook key. Several lines may
            match. Context only: count the credit once, never once per matching
            line. Empty when unavailable.
      required:
        - credit_type
        - revenue_cents
        - team_member
        - invoice
        - invoice_line_item_ids
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: >-
        Existing Breezy API key. Grants all published reads in its associated
        company. No app permission scopes.

````