> ## 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 one complete invoice

> Read only within the company associated with the validated key.



## OpenAPI

````yaml /openapi.json get /invoices/{invoice_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:
  /invoices/{invoice_id}:
    get:
      tags:
        - Invoices
      summary: Read one complete invoice
      description: Read only within the company associated with the validated key.
      operationId: getInvoice
      parameters:
        - schema:
            type: string
            format: uuid
          required: true
          name: invoice_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/InvoiceResponse'
              example:
                data:
                  id: 11111111-1111-4111-8111-000000000601
                  number: '1001'
                  status: OPEN
                  account:
                    id: 11111111-1111-4111-8111-000000000101
                    name: Example Household
                  job_id: 11111111-1111-4111-8111-000000000501
                  location_id: null
                  maintenance_plan_id: null
                  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_by:
                    id: 11111111-1111-4111-8111-000000000401
                    name: Alex Example
                  created_at: '2026-08-20T16:00:00Z'
                  updated_at: '2026-08-20T16:00:00Z'
                  issued_at: '2026-08-20T16:00:00Z'
                  due_at: '2026-08-31T07:00:00Z'
                  currency: USD
                  pricing_multiplier: 1
                  line_items:
                    - id: 11111111-1111-4111-8111-000000000901
                      position: 1
                      name: HVAC repair
                      description: HVAC repair
                      quantity: 1
                      unit_price_cents: 100000
                      subtotal_cents: 100000
                      taxable: true
                      discountable: true
                  discounts:
                    - id: 11111111-1111-4111-8111-000000000911
                      name: Service discount
                      type: FLAT
                      amount_cents: 10000
                      rate: null
                  tax:
                    name: Sales tax
                    rate: 0.1
                    rounding: round
                  amounts:
                    subtotal_cents: 100000
                    discount_cents: 10000
                    discounted_subtotal_cents: 90000
                    tax_cents: 9000
                    total_cents: 99000
                    paid_cents: 50000
                    processing_cents: 10000
                    open_balance_cents: 39000
                  payment_applications:
                    - payment_id: 11111111-1111-4111-8111-000000000701
                      applied_cents: 50000
                      payment_status: PAID
                    - payment_id: 11111111-1111-4111-8111-000000000702
                      applied_cents: 10000
                      payment_status: PROCESSING
                  aging:
                    days_past_due: 8
                    bucket: PAST_DUE_1_30
                meta:
                  request_id: example-request
                  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:
    InvoiceResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/Invoice'
        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
    Invoice:
      type: object
      properties:
        id:
          type: string
          format: uuid
        number:
          type: string
        status:
          $ref: '#/components/schemas/InvoiceStatus'
        account:
          $ref: '#/components/schemas/Reference'
        job_id:
          type: string
          nullable: true
          format: uuid
        location_id:
          type: string
          nullable: true
          format: uuid
        maintenance_plan_id:
          type: string
          nullable: true
          format: uuid
        business_unit:
          $ref: '#/components/schemas/NullableReference'
        job_type:
          $ref: '#/components/schemas/NullableReference'
        job_class:
          allOf:
            - $ref: '#/components/schemas/NullableJobClass'
            - description: >-
                Recorded job class, including legacy values; not the broader
                class group.
        created_by:
          $ref: '#/components/schemas/NullableReference'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
          description: >-
            Last update of the underlying parent record only. Child,
            payment-status, allocation and reference changes may not advance it.
        issued_at:
          type: string
          nullable: true
          format: date-time
        due_at:
          type: string
          nullable: true
          format: date-time
        currency:
          type: string
          enum:
            - USD
        pricing_multiplier:
          type: number
          minimum: 0
          exclusiveMinimum: true
        line_items:
          type: array
          items:
            $ref: '#/components/schemas/InvoiceLineItem'
          description: >-
            Complete, ordered by position then ID; also present in collection
            pages.
        discounts:
          type: array
          items:
            $ref: '#/components/schemas/InvoiceDiscount'
          description: Complete ordered discounts.
        tax:
          type: object
          properties:
            name:
              type: string
            rate:
              type: number
              minimum: 0
              maximum: 1
            rounding:
              type: string
              enum:
                - ceil
                - round
          required:
            - name
            - rate
            - rounding
        amounts:
          $ref: '#/components/schemas/InvoiceAmounts'
        payment_applications:
          type: array
          items:
            $ref: '#/components/schemas/InvoicePaymentApplication'
        aging:
          type: object
          nullable: true
          properties:
            days_past_due:
              type: integer
              nullable: true
              description: >-
                Company-local today minus due date; negative before due, null
                without due date.
            bucket:
              type: string
              enum:
                - CURRENT
                - PAST_DUE_1_30
                - PAST_DUE_31_60
                - PAST_DUE_61_90
                - PAST_DUE_91_PLUS
          required:
            - days_past_due
            - bucket
          description: >-
            Present only for OPEN invoices. No due date uses CURRENT and null
            days_past_due.
      required:
        - id
        - number
        - status
        - account
        - job_id
        - location_id
        - maintenance_plan_id
        - business_unit
        - job_type
        - job_class
        - created_by
        - created_at
        - updated_at
        - issued_at
        - due_at
        - currency
        - pricing_multiplier
        - line_items
        - discounts
        - tax
        - amounts
        - payment_applications
        - aging
    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.
    InvoiceStatus:
      type: string
      enum:
        - DRAFT
        - OPEN
        - PAID
        - VOIDED
        - UNCOLLECTABLE
    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
    InvoiceLineItem:
      type: object
      properties:
        id:
          type: string
          format: uuid
        position:
          type: integer
          minimum: 0
        name:
          type: string
        description:
          type: string
        quantity:
          type: number
        unit_price_cents:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Recorded unit price before the invoice pricing multiplier.
        subtotal_cents:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Rounded line subtotal after the pricing multiplier, before discounts
            and tax.
        taxable:
          type: boolean
        discountable:
          type: boolean
      required:
        - id
        - position
        - name
        - description
        - quantity
        - unit_price_cents
        - subtotal_cents
        - taxable
        - discountable
    InvoiceDiscount:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        type:
          type: string
          enum:
            - FLAT
            - RATE
        amount_cents:
          type: integer
          nullable: true
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Configured flat discount, null for RATE. Actual combined discount is
            amounts.discount_cents.
        rate:
          type: number
          nullable: true
          minimum: 0
          maximum: 1
          description: Fraction for RATE; null for FLAT.
      required:
        - id
        - name
        - type
        - amount_cents
        - rate
    InvoiceAmounts:
      type: object
      properties:
        subtotal_cents:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Integer USD cents; signed where adjustments or balances permit.
        discount_cents:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Integer USD cents; signed where adjustments or balances permit.
        discounted_subtotal_cents:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Integer USD cents; signed where adjustments or balances permit.
        tax_cents:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Integer USD cents; signed where adjustments or balances permit.
        total_cents:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Integer USD cents; signed where adjustments or balances permit.
        paid_cents:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Applications of payments whose latest status is PAID.
        processing_cents:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Applications of payments whose latest status is PENDING or
            PROCESSING.
        open_balance_cents:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            For OPEN: total minus paid minus processing. Signed, without
            clamping. Zero for other statuses. Refunds do not automatically
            reopen this balance.
      required:
        - subtotal_cents
        - discount_cents
        - discounted_subtotal_cents
        - tax_cents
        - total_cents
        - paid_cents
        - processing_cents
        - open_balance_cents
    InvoicePaymentApplication:
      type: object
      properties:
        payment_id:
          type: string
          format: uuid
        applied_cents:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Integer USD cents; signed where adjustments or balances permit.
        payment_status:
          allOf:
            - $ref: '#/components/schemas/NullablePaymentStatus'
            - description: Null when no status has been recorded.
      required:
        - payment_id
        - applied_cents
        - payment_status
      description: >-
        Identity is (invoice ID, payment_id). Includes unsuccessful/pending
        applications; only qualifying statuses enter invoice amounts.
    NullablePaymentStatus:
      type: string
      nullable: true
      enum:
        - SUBMITTING
        - PENDING
        - PAID
        - FAILED
        - CANCELED
        - PROCESSING
        - null
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: >-
        Existing Breezy API key. Grants all published reads in its associated
        company. No app permission scopes.

````