> ## 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.

# Read the complete saved revenue credits of one job

> Uses the job ID and returns the same complete representation as collection pages. Replace the entire credit array when refreshing. Unavailable current references remain null or empty while owned credit amounts remain readable. Matching invoice lines provide context only; several may match one saved credit.



## OpenAPI

````yaml /openapi.json get /revenue-attributions/{id}
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/{id}:
    get:
      tags:
        - RevenueAttributions
      summary: Read the complete saved revenue credits of one job
      description: >-
        Uses the job ID and returns the same complete representation as
        collection pages. Replace the entire credit array when refreshing.
        Unavailable current references remain null or empty while owned credit
        amounts remain readable. Matching invoice lines provide context only;
        several may match one saved credit.
      operationId: getRevenueAttributions
      parameters:
        - schema:
            type: string
            format: uuid
          required: true
          name: id
          in: path
      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/RevenueAttributionsResponse'
              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: []
                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:
    RevenueAttributionsResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/RevenueAttributions'
        meta:
          $ref: '#/components/schemas/ResponseMeta'
      required:
        - data
        - 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
    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.

````