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

# List customer accounts

> Returns each customer's account as at today, one row per customer and currency, with a total per currency. Every figure covers all dates: there is no date window.

`outstanding` is what customers owe: every invoice with status `ISSUED` or `PAYMENT_FAILED`, at the amount due printed on the invoice (subtotal and tax, each rounded to the currency's minor unit), so it is gross of tax. Revenue (`GET /v0/revenue`) is net of tax. `outstanding` splits into `awaitingPayment` (status `ISSUED`) and `paymentFailed` (status `PAYMENT_FAILED`, collection has ended); the two always add up to it, in count and amount. A credit invoice (a negative amount due) nets against what is owed and is counted in no `count`; nor is an invoice whose amount due rounds to zero. A customer with nothing counted and nothing owed has no row.

Amounts are grouped by currency and never combined or converted. `totals` covers every row in the filter, not only the returned page, so the rows on one page add up to `totals` only when the page holds every row. Pages fetched in separate requests are separate reads.



## OpenAPI

````yaml /openapi.json get /v0/revenue/accounts
openapi: 3.1.0
info:
  title: Paygentic API
  version: 0.1.0
  description: >
    The Paygentic API provides a comprehensive platform for building and scaling
    monetization infrastructure.


    ## Authentication

    All API requests require authentication using an API key passed in the
    `Authorization` header:

    ```

    Authorization: Bearer YOUR_API_KEY

    ```


    ## Base URL

    All API requests should be made to:

    ```

    https://api.paygentic.io/v0

    ```
  contact:
    name: Paygentic Support
    email: support@paygentic.io
  license:
    name: Proprietary
servers:
  - url: https://api.paygentic.io
    description: Production API
  - url: https://api.sandbox.paygentic.io
    description: Sandbox API
security:
  - BearerAuth: []
tags:
  - name: Customers
    description: >-
      A `Customer` is an entity connected to a `Merchant` via a `Subscription`.
      This represents the merchant-facing perspective of `Consumers` who
      purchase their `Products`.
  - name: Billable Metrics
    description: >-
      A `Billable Metric` defines a measurable quantity tied to a `Product`'s
      consumption. Each metric stores details including its label, an
      explanatory description, and measurement units.
  - name: Grants
    description: >-
      Grants credit a customer's metered entitlement balance. Merchants can
      create grants directly or void existing ones.


      Use `GET /v1/entitlements?customerId={id}` or `GET
      /v1/entitlements?subscriptionId={id}` to find the metered entitlement `id`
      needed for these endpoints.
  - name: Features
    description: >-
      A `Feature` represents a specific capability or functionality provided by
      a `Product`. Features can be metered (usage-based), static (fixed
      allocation), or boolean (enabled/disabled).
  - name: Fees
    description: >-
      A `Fee` defines a recurring or one-time charge tied to a `Product`. Fees
      are linked to prices, and cadence is defined on the Price.
  - name: Plans
    description: >-
      A `Plan` links a collection of `Prices` to a `Product`. It functions as a
      pricing structure document for a particular feature set or service
      offering.
  - name: Prices
    description: >-
      A `Price` determines the monetary value for a single unit of a `Billable
      Metric`. Prices are exclusively grouped within a `Plan`.
  - name: Products
    description: >-
      A `Product` is an offering sold by a `Merchant`. It includes product
      metadata like title, summary, and pricing details. `Plans`, `Prices`, and
      `Subscriptions` are all associated with products.
  - name: Sources
    description: >-
      A `Source` is an external data provider capable of automatically creating
      usage events. Configuration occurs at the plan level, enabling data
      retrieval from third-party platforms such as Stripe to produce billable
      events.
  - name: Subscriptions
    description: >-
      A `Subscription` is a customer's commitment to purchase a `Product`
      following the terms of a `Plan` and its linked `Prices`.
  - name: Users
    description: >-
      A `User` is an entity granted access to an Organization's resources. All
      operations are performed by users.
  - name: Invoices V2
    description: >-
      Invoice V2 operations supporting billing cycles organized by time periods.
      Warning: v0 invoice endpoints are no longer supported.
  - name: Revenue
    description: Revenue data from invoices and payments
  - name: Profitability
    description: Per-customer profitability summaries
  - name: Test Clocks
    description: >-
      Test clocks provide programmable time control to simulate subscription and
      billing scenarios during testing.
  - name: Merchant Data
    description: Reset a merchant's data outside production
  - name: Events
    description: Ingest raw metering events that are processed by the meters service.
  - name: Payments
    description: >-
      Create and manage one-off payments. A payment represents a single charge
      that a merchant wants to collect from a customer.
  - name: Payment Sessions
    description: >-
      Handle payment session lifecycle and processing across various entity
      types including invoices and subscriptions
  - name: Costs
    description: >-
      A Cost represents the operational or infrastructure expense of serving
      customers for a given product. Costs are metered (driven by event-based
      usage) and are tracked in parallel with billable metrics to give merchants
      visibility into both revenue and cost per customer.
  - name: ExternalReferences
    description: >-
      An `ExternalReference` links a Paygentic entity (e.g. an `Item`) to a
      record in an external system such as Salesforce or NetSuite. Multiple
      external records may map to the same Paygentic entity, but each external
      id is the *primary* reference of at most one entity per merchant.
  - name: Items
    description: >-
      An `Item` is the canonical "thing you sell" that external-system mappings
      point at. It is fully decoupled from the billing `Product` and holds no
      pricing/plan/metering, and it is CRM/ERP agnostic — which providers map to
      it lives entirely in its `ExternalReference` rows.
  - name: MerchantIntegrations
    description: >-
      A `MerchantIntegration` records a merchant's connection to an external
      provider. One connection per `(merchant, provider)` — re-connecting
      upserts in place.
  - name: Approvals
    description: Submit, decide, cancel, and read maker-checker approvals.
  - name: Orders
    description: Manage Orders, their line items, and billing schedules.
  - name: Billing Schedules
    description: >-
      Owner-polymorphic billing schedules with intervals and staged invoice
      projections. A BillingSchedule belongs to exactly one Order or one
      Subscription (XOR). Cadence lives on ScheduleIntervals
      (cadence-on-the-line).
  - name: Webhooks
    description: >-
      Endpoints for setting up webhook integrations and administering webhook
      settings
paths:
  /v0/revenue/accounts:
    get:
      tags:
        - Revenue
      summary: List customer accounts
      description: >-
        Returns each customer's account as at today, one row per customer and
        currency, with a total per currency. Every figure covers all dates:
        there is no date window.


        `outstanding` is what customers owe: every invoice with status `ISSUED`
        or `PAYMENT_FAILED`, at the amount due printed on the invoice (subtotal
        and tax, each rounded to the currency's minor unit), so it is gross of
        tax. Revenue (`GET /v0/revenue`) is net of tax. `outstanding` splits
        into `awaitingPayment` (status `ISSUED`) and `paymentFailed` (status
        `PAYMENT_FAILED`, collection has ended); the two always add up to it, in
        count and amount. A credit invoice (a negative amount due) nets against
        what is owed and is counted in no `count`; nor is an invoice whose
        amount due rounds to zero. A customer with nothing counted and nothing
        owed has no row.


        Amounts are grouped by currency and never combined or converted.
        `totals` covers every row in the filter, not only the returned page, so
        the rows on one page add up to `totals` only when the page holds every
        row. Pages fetched in separate requests are separate reads.
      operationId: getRevenueAccounts
      parameters:
        - name: merchantId
          in: query
          required: true
          description: Merchant whose customer accounts to report
          schema:
            $ref: '#/components/schemas/OrganizationId'
        - name: customerIds
          in: query
          required: false
          description: >-
            Limit the rows and the totals to these customers of the merchant. A
            customer of another merchant, or one that does not exist, returns
            404. A customer billed in several currencies has a row for each, so
            set `limit` to cover them.
          schema:
            type: array
            minItems: 1
            maxItems: 100
            items:
              type: string
              minLength: 1
          style: form
          explode: true
        - name: limit
          in: query
          required: false
          description: Number of rows to return
          schema:
            type: integer
            minimum: 1
            maximum: 500
            default: 50
        - name: offset
          in: query
          required: false
          description: Number of rows to skip
          schema:
            type: integer
            minimum: 0
            default: 0
      responses:
        '200':
          description: Customer accounts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevenueAccountsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  schemas:
    OrganizationId:
      type: string
      pattern: ^org_[a-zA-Z0-9]+$
      description: Unique identifier for an organization
    RevenueAccountsResponse:
      type: object
      required:
        - object
        - totals
        - data
        - pagination
      properties:
        object:
          type: string
          enum:
            - list
          description: Object type identifier
        totals:
          type: array
          description: >-
            One entry per currency with at least one row in the filter, over
            every row and not only this page. The merchant's primary currency
            comes first, then the rest in alphabetical order. Empty when there
            are no rows.
          items:
            $ref: '#/components/schemas/RevenueAccountTotal'
        data:
          type: array
          description: >-
            One row per customer and currency with at least one unpaid invoice,
            in the currency order of `totals`, then by `outstanding.amount`
            descending, then by `customerId`. A customer billed in two
            currencies has two rows.
          items:
            $ref: '#/components/schemas/RevenueAccountRow'
        pagination:
          $ref: '#/components/schemas/OffsetPagination'
    RevenueAccountTotal:
      type: object
      required:
        - currency
        - outstanding
      properties:
        currency:
          type: string
          description: ISO 4217 currency code of every amount in this entry
        outstanding:
          $ref: '#/components/schemas/OutstandingBlock'
    RevenueAccountRow:
      type: object
      required:
        - customerId
        - customerName
        - currency
        - outstanding
      properties:
        customerId:
          type: string
          description: Customer ID
        customerName:
          type: string
          description: >-
            Customer display name, or the customer ID when no name is recorded.
            A deleted customer who still owes money keeps its row.
        currency:
          type: string
          description: ISO 4217 currency code of every amount in this row
        outstanding:
          $ref: '#/components/schemas/OutstandingBlock'
    OffsetPagination:
      type: object
      description: Offset-based pagination response.
      properties:
        limit:
          type: integer
          description: Requested page size.
        offset:
          type: integer
          description: Number of items skipped.
        total:
          type: integer
          description: Total number of items available.
      required:
        - limit
        - offset
        - total
    Error:
      type: object
      required:
        - message
      properties:
        error:
          type: string
          description: >-
            Coarse HTTP error category (e.g. 'bad_request', 'forbidden'). Maps
            to the HTTP status code.
        message:
          type: string
          description: >-
            Human-readable error message. Clients must not parse this field
            programmatically.
        code:
          type: string
          examples:
            - TAX_NOT_ENABLED
            - PAYMENT_SESSION_EXPIRED
          description: >-
            Optional semantic business error code for machine-readable
            discrimination (e.g. 'TAX_NOT_ENABLED'). UPPER_SNAKE_CASE. Clients
            should check this field, not message.
        details:
          type: object
          description: Additional error details
          additionalProperties: true
      example:
        message: The requested resource was not found
        error: not_found
    ValidationError:
      type: object
      required:
        - message
        - errors
      properties:
        error:
          type: string
          enum:
            - validation_error
          default: validation_error
          description: Error type indicating validation failure
        message:
          type: string
          description: Human-readable error message
        errors:
          type: array
          items:
            type: object
            properties:
              field:
                type: string
                description: The field that failed validation
              message:
                type: string
                description: Validation error message for this field
              code:
                type: string
                description: Validation error code
            required:
              - field
              - message
          description: Array of field-specific validation errors
      example:
        message: Validation failed
        error: validation_error
        errors:
          - field: email
            message: Invalid email format
            code: invalid_format
    OutstandingBlock:
      type: object
      required:
        - count
        - amount
        - awaitingPayment
        - paymentFailed
      description: >-
        What is owed, gross of tax, from any date. `awaitingPayment` and
        `paymentFailed` add up to it, in count and amount.
      properties:
        count:
          type: integer
          minimum: 0
          description: >-
            Number of unpaid invoices with an amount due above zero. A credit
            invoice, or one whose amount due rounds to zero, is not counted.
        amount:
          type: string
          description: >-
            Total amount due in major units of the currency, in its decimal
            places (for example "123.00"). Negative when credits exceed what is
            owed.
        awaitingPayment:
          allOf:
            - $ref: '#/components/schemas/AccountFigure'
          description: The part with status `ISSUED`, including any credit invoice
        paymentFailed:
          allOf:
            - $ref: '#/components/schemas/AccountFigure'
          description: 'The part with status `PAYMENT_FAILED`: collection has ended'
    AccountFigure:
      type: object
      required:
        - count
        - amount
      description: A number of invoices and their total amount due, gross of tax.
      properties:
        count:
          type: integer
          minimum: 0
          description: >-
            Number of invoices with an amount due above zero. A credit invoice,
            or one whose amount due rounds to zero, is not counted.
        amount:
          type: string
          description: >-
            Total amount due in major units of the currency, in its decimal
            places
  responses:
    BadRequest:
      description: >-
        Bad Request - The request could not be understood or was missing
        required parameters
      content:
        application/json:
          schema:
            oneOf:
              - $ref: '#/components/schemas/Error'
              - $ref: '#/components/schemas/ValidationError'
    Unauthorized:
      description: Unauthorized - Authentication failed or user does not have permissions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: Forbidden - Request is understood but refused
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Not Found - The requested resource could not be found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InternalServerError:
      description: Internal Server Error - Something went wrong on the server side
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: API key authentication

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.