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

# List bookkeeping businesses

> Returns a paginated list of businesses enrolled in bookkeeping for the authenticated client. Businesses with NOT_PURCHASED status are excluded. Designed for lightweight discovery and analytics dashboards.

Returns businesses enrolled in bookkeeping for your client. Businesses with `NOT_PURCHASED` status are excluded.

Results are paginated. The cursor for the next page is returned in `meta.pagination.cursor`, alongside `has_more` and (when requested with `show_total_count`) `total_count`. For full cursor and limit behavior, see [Pagination](/api-details/pagination).


## OpenAPI

````yaml get /v1/reports/bookkeeping
openapi: 3.0.1
info:
  title: API
  version: latest
servers: []
security:
  - BearerAuth: []
tags: []
externalDocs:
  url: /
paths:
  /v1/reports/bookkeeping:
    get:
      tags: []
      summary: List bookkeeping businesses
      description: >-
        Returns a paginated list of businesses enrolled in bookkeeping for the
        authenticated client. Businesses with NOT_PURCHASED status are excluded.
        Designed for lightweight discovery and analytics dashboards.
      operationId: reports.bookkeeping.get
      parameters:
        - name: cursor
          in: query
          description: Pagination cursor for fetching the next page of results.
          required: false
          schema:
            type: string
        - name: limit
          in: query
          description: >-
            Maximum number of results to return. Must be at least 1. Defaults to
            100.
          required: false
          schema:
            type: integer
            minimum: 1
            default: 100
        - name: show_total_count
          in: query
          description: When true, include total_count in pagination metadata.
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Paginated list of enrolled bookkeeping businesses.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/ApiBookkeepingReportingBusiness'
                  meta:
                    $ref: '#/components/schemas/RequestMetadata'
                required:
                  - data
        '400':
          description: Invalid pagination parameters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      deprecated: false
components:
  schemas:
    ApiBookkeepingReportingBusiness:
      type: object
      description: Lightweight summary of a business enrolled in bookkeeping.
      properties:
        type:
          type: string
          description: >-
            Resource type. Value will be
            `com.layerfi.routers.ApiBookkeepingReportingBusiness`.
          example: com.layerfi.routers.ApiBookkeepingReportingBusiness
        business_id:
          type: string
          format: uuid
          description: The bookkeeping business.
        onboarding_date:
          type: string
          format: date
          nullable: true
          description: >-
            Date bookkeeping onboarding was marked complete. Null while
            onboarding.
        first_bookkeeping_months:
          type: string
          format: date
          nullable: true
          description: First month Layer is responsible for, including any catch-up window.
        enrollment_status:
          $ref: '#/components/schemas/BookkeepingEnrollmentStatus'
        churned_at:
          type: string
          format: date
          nullable: true
          description: >-
            Date enrollment was paused or churned. Null unless the business is
            paused.
      required:
        - business_id
        - enrollment_status
    RequestMetadata:
      type: object
      description: Request metadata. Present on paginated list responses.
      properties:
        type:
          type: string
          description: Metadata type discriminator. Value will be `request_metadata`.
          example: request_metadata
        pagination:
          $ref: '#/components/schemas/PaginationMetadata'
    ApiError:
      type: object
      description: An error object returned in API error responses.
      properties:
        type:
          $ref: '#/components/schemas/ApiErrorType'
          description: >-
            A fixed category for the error, helpful for categorizing and
            processing errors.
        description:
          type: string
          description: A human-readable error description.
        error_enum:
          $ref: '#/components/schemas/ApiEnumErrorType'
          description: >-
            A stable, machine-readable identifier for programmatically handling
            specific error conditions. Only present for 4xx client errors—not
            included for 5xx server errors. Use this instead of parsing the
            description field, as enum values remain stable across API versions.
          nullable: true
        meta:
          type: object
          description: Optional additional information about the error.
          nullable: true
      required:
        - type
        - description
    BookkeepingEnrollmentStatus:
      type: string
      enum:
        - NOT_PURCHASED
        - ONBOARDING
        - ACTIVE
        - BOOKKEEPING_PAUSED
      description: Bookkeeping enrollment status for a business.
      example: ACTIVE
    PaginationMetadata:
      type: object
      description: >-
        Cursor-based pagination metadata returned alongside paginated list
        responses.
      properties:
        sort_by:
          type: string
          nullable: true
          description: Field the result set is sorted by.
        sort_order:
          type: string
          enum:
            - ASC
            - DESC
          description: Sort direction applied to the result set.
        cursor:
          type: string
          nullable: true
          description: >-
            Opaque cursor to pass as `pagination_cursor` to fetch the next page.
            Null when there are no further pages.
        has_more:
          type: boolean
          description: Whether additional pages are available after the current one.
        total_count:
          type: integer
          format: int64
          nullable: true
          description: Total number of records across all pages, when available.
      required:
        - sort_by
        - sort_order
        - cursor
        - has_more
    ApiErrorType:
      type: string
      enum:
        - ResourceArchived
        - AuthFailure
        - Plaid
        - Stripe
        - InvalidState
        - ResourceNotFound
        - InvalidParameters
        - JsonSerialization
        - Unknown
        - BadRequest
        - PaginationCursor
        - Conflict
        - LedgerOperationFailed
    ApiEnumErrorType:
      type: string
      description: >-
        Stable enum values for programmatic error handling. Only present in 4xx
        error responses.
      enum:
        - AccessCodeInvalid
        - BalanceSheetDoesNotBalance
        - BalanceSheetMissingAccount
        - BankStatementParserError
        - BillStateError
        - BulkCategorizeFailure
        - BulkMatchFailure
        - BusinessTaskAlreadyCompleted
        - BusinessTaskDeleted
        - CalendlyOAuthError
        - CallBookingError
        - CantUpdateTransactionInCustomerPayout
        - CantUpdateTransactionInVendorPayout
        - CheckPayrollConfigNotFound
        - CheckPayrollServiceNotFound
        - ClerkUserAlreadyExists
        - ConflictingQueryParams
        - CustomAccountAlreadyExists
        - CustomTransactionCsvParsingError
        - CustomTransactionUploadFailure
        - CustomerPayoutInputFormatError
        - DoesNotMatchExistingEntity
        - EmptyBatchRequest
        - ExpenseParserError
        - ExternalAccountBalanceReconciliationError
        - ExternalIdConflict
        - InvalidCategory
        - InvalidEffectiveDate
        - InvalidLedgerOperation
        - InvalidMonthlyAverageRange
        - InvalidMultiPartRequest
        - InvalidPaginationCursor
        - InvalidPayload
        - InvoiceDeleted
        - InvoiceNotFound
        - InvoiceReferenceMismatch
        - InvoiceStateError
        - ManualRateLimit
        - MultipleTagKeyFiltersUnsupported
        - NoCognitoUserFound
        - NoOpeningBalanceFound
        - NotYetReconciled
        - OnePasswordApiError
        - OnePasswordItemNotFound
        - OnePasswordVaultNotFound
        - OpenAICategorizationError
        - PaymentLinkInvalid
        - PayrollStateError
        - PeriodIsClosed
        - PeriodNotClosed
        - PhoneNumberAlreadyRegistered
        - PlaidApiError
        - PlaidConnectionBroken
        - PlaidCreateLinkTokenError
        - PlaidCredentialsNotConfigured
        - PlaidExchangePublicTokenError
        - PlaidGetInstitutionByIdError
        - PlaidGetItemError
        - PlaidInvalidEnvironment
        - PlaidItemAlreadyExists
        - PlaidItemNotFound
        - PlaidProcessorApiError
        - PlaidUnlinkItemError
        - QueryParamFormat
        - QueryParamMissing
        - QuickbooksBrokenConnection
        - QuickbooksConnectionAlreadyExists
        - QuickbooksConnectionAlreadySyncing
        - QuickbooksConnectionMissing
        - QuickbooksConnectionNotActivated
        - QuickbooksInvalidRequest
        - QuickbooksInvalidState
        - QuickbooksNoMatchingAccount
        - QuickbooksNonPostingAccountType
        - QuickbooksNotConfigured
        - QuickbooksOAuthCallbackInvalid
        - QuickbooksOAuthError
        - QuickbooksTokenExpired
        - ResourceArchived
        - ScheduleCNotConfigured
        - SmsNotEnabled
        - SpecifiedBadRequest
        - SpecifiedIdNotFound
        - SplitTransactionError
        - StepEvaluationBadRequest
        - StripeConnectAccountIdNotFound
        - StripeCredentialsNotConfigured
        - StripeGetBalanceForConnectAccountFailure
        - StripeRedirectOrRefreshUrlNotConfigured
        - TagFilterNotFound
        - UnexpectedQueryParam
        - UnitAccountsInUse
        - WrongAnswerType
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````