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

# Tenant-wide ledger



## OpenAPI

````yaml /api-reference/openapi.json get /credits/ledger
openapi: 3.1.0
info:
  title: Locus Pro API
  description: >-
    Access paid tools, manage prepaid balances, and build usage billing. Send
    money as exact decimal strings and reuse Idempotency-Key on retries.
    Management routes require a scoped server key or authorized dashboard
    session. Sensitive workspace changes require an owner or admin with recent
    MFA or passkey verification, except where an operation documents a stricter
    boundary. Interactive agents use MCP OAuth; unattended agents use scoped
    Agent Connections. Browser widgets use end-user tokens.
  version: 0.7.0
servers:
  - url: https://api.paywithlocus.com/api
    description: Production
  - url: https://api.stage.paywithlocus.com/api
    description: Stage — evaluation and integration testing
security:
  - secretKey: []
tags:
  - name: Authentication
    description: Email-verified self-serve account creation and dashboard identity
  - name: Tenants
    description: Tenant profile, keys, and settings (dashboard session or secret key)
  - name: Workspace members
    description: Invite-only human workspace membership and role administration
  - name: Catalog
    description: Enable/disable APIs and set markups
  - name: Custom APIs
    description: Feature-gated enterprise BYOK providers and schema-backed custom actions
  - name: End users
    description: End-user accounts, tokens, and allocations
  - name: Top-ups
    description: Locus-hosted checkout top-ups and quotes
  - name: Ledger
    description: Burn/top-up history and earnings
  - name: Webhooks
    description: Signed events, delivery inspection, and replay
  - name: Burn
    description: Metered pay-per-use calls
  - name: MCP
    description: Stateless Streamable HTTP transport and MCP tool-result contracts
  - name: Okibi Identity
    description: >-
      Feature-gated Okibi identity verification and scoped native CLI credential
      bootstrap
  - name: Widget
    description: End-user JWT surface; a matching publishable key is optional
  - name: Agent-native onboarding
    description: >-
      Self-registration, human Stripe funding handoff, and restricted account
      setup for headless agents
  - name: Hosted Workflows
    description: >-
      Tenant-private TypeScript Workflow definitions, immutable versions,
      bounded runs, artifacts, and recovery
  - name: Agent connections
    description: Scoped, expiring, revocable credentials for agent execution
  - name: Recipes
    description: >-
      Search, research, extraction, enrichment, and travel outcomes across
      providers
paths:
  /credits/ledger:
    get:
      tags:
        - Ledger
      summary: Tenant-wide ledger
      parameters:
        - name: category
          in: query
          schema:
            type: string
            enum:
              - TOPUP
              - BURN
              - REFUND
              - CLAWBACK
              - FEE
              - ADJUSTMENT
              - ALLOCATION
              - PROMO
        - name: externalUserId
          in: query
          schema:
            $ref: '#/components/schemas/ExternalUserId'
        - name: initiator
          in: query
          schema:
            type: string
          description: >-
            Spender reference <type>:<id>, matching the analytics initiator
            identity. Cannot be combined with externalUserId or
            account=platform; unattributed is not filterable.
        - name: provider
          in: query
          schema:
            type: string
          description: >-
            Matches the provider recorded on the ledger entry. Legacy entries
            without provider metadata are excluded from this filtered ledger
            view.
        - name: endpoint
          in: query
          schema:
            type: string
          description: metadata.endpoint equality. Requires provider.
        - name: createdAfter
          in: query
          schema:
            type: string
            format: date-time
          description: Inclusive lower bound. Strict ISO-8601.
        - name: createdBefore
          in: query
          schema:
            type: string
            format: date-time
          description: Exclusive upper bound. Strict ISO-8601.
        - name: attribution.{key}
          in: query
          schema:
            type: string
          description: >-
            Equality filter on metadata.attribution.<key>, one query parameter
            per key: attribution.entityId=acct_889. Dot form only — bracket form
            is not parsed.
        - name: sourceKey
          in: query
          schema:
            type: string
          description: Narrow to one ledger event kind, e.g. wapi_burn or stripe_topup.
        - name: account
          in: query
          schema:
            type: string
            enum:
              - platform
          description: >-
            Restrict to the tenant's pooled platform account. Mutually exclusive
            with externalUserId and with an end-user initiator.
        - name: cursor
          in: query
          schema:
            type: string
        - name: limit
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 200
            default: 50
      responses:
        '200':
          description: Ledger page
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenantLedgerPage'
      security:
        - dashboardSession: []
        - secretKey: []
components:
  schemas:
    ExternalUserId:
      type: string
      minLength: 1
      maxLength: 200
      pattern: ^[A-Za-z0-9][A-Za-z0-9._:@/-]{0,199}$
      description: >-
        Case-sensitive immutable ID in the tenant namespace. Prefer an
        identity-provider subject, not an email address.
    TenantLedgerPage:
      type: object
      additionalProperties: false
      required:
        - success
        - entries
        - nextCursor
        - appliedFilters
      properties:
        success:
          type: boolean
          const: true
        entries:
          type: array
          items:
            $ref: '#/components/schemas/LedgerEntry'
        nextCursor:
          type:
            - string
            - 'null'
        appliedFilters:
          $ref: '#/components/schemas/AppliedLedgerFilters'
    LedgerEntry:
      type: object
      additionalProperties: false
      required:
        - id
        - direction
        - category
        - amountUsdc
        - amountCredits
        - balanceAfterUsdc
        - baseUsdc
        - marginUsdc
        - markupBps
        - sourceKey
        - externalReference
        - externalUserId
        - metadata
        - createdAt
      properties:
        id:
          type: string
          format: uuid
        direction:
          type: string
          enum:
            - DEBIT
            - CREDIT
        category:
          type: string
        amountUsdc:
          $ref: '#/components/schemas/DecimalString'
        amountCredits:
          $ref: '#/components/schemas/DecimalString'
        balanceAfterUsdc:
          $ref: '#/components/schemas/DecimalString'
        baseUsdc:
          oneOf:
            - $ref: '#/components/schemas/DecimalString'
            - type: 'null'
        marginUsdc:
          oneOf:
            - $ref: '#/components/schemas/DecimalString'
            - type: 'null'
        markupBps:
          type:
            - integer
            - 'null'
        sourceKey:
          type: string
        externalReference:
          type:
            - string
            - 'null'
        externalUserId:
          type:
            - string
            - 'null'
        metadata: {}
        createdAt:
          type: string
          format: date-time
    AppliedLedgerFilters:
      type: array
      description: >-
        Names of the narrowing query filters this server applied. An empty array
        means the request did not include a narrowing filter.
      items:
        type: string
        enum:
          - account
          - attribution
          - category
          - createdAfter
          - createdBefore
          - endpoint
          - externalUserId
          - initiator
          - provider
          - sourceKey
      uniqueItems: true
    DecimalString:
      type: string
      pattern: ^\d+(?:\.\d{1,6})?$
      description: >-
        Non-negative exact decimal string with at most six fractional digits.
        Endpoint-specific positivity and amount limits still apply.
  securitySchemes:
    secretKey:
      type: http
      scheme: bearer
      description: Tenant secret key (lcr_…). Server-side only.
    dashboardSession:
      type: http
      scheme: bearer
      description: >-
        Locus Pro dashboard session (Cognito). High-risk workspace
        administration requires an owner or admin role and fresh MFA/passkey
        step-up.

````

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