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

# List payouts

> Returns your payouts, newest first, one page at a time. Filter by `status` to see what is held or scheduled,
by `paid_after` and `paid_before` to build a monthly statement, or by `referral_id` to find one deal's share.

Each payout carries the `statement_descriptor` that appears on your bank statement, so you can match the
two with a string comparison. A payout's status describes where the commission is in the process. It does
not mean O.J. holds money on your behalf the way a bank would.




## OpenAPI

````yaml /api-reference/openapi.yaml get /payouts
openapi: 3.1.0
info:
  title: O.J. Agent Development Kit (ADK)
  version: 0.5.1
  summary: >-
    Send O.J. a business. Get back named lender matches, what's needed, offers
    and funding status.
  description: >
    The O.J. ADK lets platforms with small-business customers offer financing
    without becoming a lender or a

    broker. You send a business as a **referral**. O.J. matches it to lender
    programs, collects documents,

    submits to lenders and tracks the deal to funding. You earn a share of the
    commission on every funded loan.


    Integrate with **O.J. Embed** (drop-in screens), the **REST API** with
    webhooks, or **MCP** for agents. All

    three read and write the same referral.


    Conventions: OAuth 2.0 client credentials, amounts in cents, prefixed ids,
    cursor pagination, an

    `Idempotency-Key` on every POST, RFC 9457 errors, and Standard Webhooks
    signatures.
  license:
    name: Proprietary — O.J. partner terms
    identifier: LicenseRef-OJ-Partner
  contact:
    name: O.J. Developer Support
    email: developers@meet-oj.com
servers:
  - url: https://sandbox.api.meet-oj.com/partner/v0
    description: Sandbox
  - url: https://api.meet-oj.com/partner/v0
    description: Production
security:
  - oauth2: []
tags:
  - name: Referrals
    description: >-
      A referral is one business you sent to O.J. Every other resource belongs
      to a referral.
  - name: Matches
    description: >-
      The lenders a business matches, named, with estimated limits. `POST
      /match_checks` screens raw numbers without creating a referral. A match is
      not a credit decision; the lender decides.
  - name: Documents
    description: >-
      Documents O.J. still needs, and uploads by API. Most integrations show the
      `next_action` button instead.
  - name: Offers
    description: >-
      Offers returned by lenders. Indicative terms computed before a lender
      replies are marked `binding: false`.
  - name: Sessions
    description: >-
      Create a session to open an O.J. screen: a `client_token` for Embed, or a
      hosted `url` to redirect to.
  - name: Events
    description: >-
      Every change to a referral is an event, delivered by webhook, streamed
      over SSE, and kept for 30 days at `GET /events`.
  - name: Payouts
    description: >-
      Your share of the commission on each funded referral. Match rows to your
      bank statement with `statement_descriptor`. Payout destinations are set
      during onboarding and cannot be changed by API.
  - name: Conversation
    description: >-
      The message thread between O.J., the borrower and your team on a referral,
      across every channel.
  - name: Channels
    description: >-
      Channel connectors let O.J. reach your borrowers through channels you own
      (in-app inbox, SMS, Apple Business Messages, email), in your brand.
  - name: Policy
    description: >-
      Account-level rules: send approval, allowed Embed origins, contact
      channels, default intent and reminder cadence.
  - name: Programs
    description: >-
      For lenders running a program on O.J.: receive submissions, record
      decisions and report funding.
  - name: Webhooks
    description: >-
      Register endpoints that receive signed events. Deliveries follow Standard
      Webhooks.
paths:
  /payouts:
    get:
      tags:
        - Payouts
      summary: List payouts
      description: >
        Returns your payouts, newest first, one page at a time. Filter by
        `status` to see what is held or scheduled,

        by `paid_after` and `paid_before` to build a monthly statement, or by
        `referral_id` to find one deal's share.


        Each payout carries the `statement_descriptor` that appears on your bank
        statement, so you can match the

        two with a string comparison. A payout's status describes where the
        commission is in the process. It does

        not mean O.J. holds money on your behalf the way a bank would.
      operationId: listPayouts
      parameters:
        - name: status
          in: query
          description: Only return payouts in this state.
          schema:
            $ref: '#/components/schemas/PayoutStatus'
        - name: referral_id
          in: query
          description: Only return the payout for this referral.
          schema:
            type: string
        - name: paid_after
          in: query
          description: Only return payouts paid on or after this date.
          schema:
            type: string
            format: date
        - name: paid_before
          in: query
          description: Only return payouts paid before this date.
          schema:
            type: string
            format: date
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/StartingAfter'
      responses:
        '200':
          description: A page of payouts
          headers:
            OJ-Request-Id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                  - has_more
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Payout'
                  has_more:
                    type: boolean
        '401':
          $ref: '#/components/responses/Error'
components:
  schemas:
    PayoutStatus:
      type: string
      description: >
        Where your share of the commission is.


        `estimated` is what you would earn if the current offer funds. `pending`
        means the deal has funded and O.J.

        has invoiced the lender. `received` means the lender has paid O.J.
        `held` means O.J. is holding your share

        until the lender's clawback window has passed. (A clawback is when a
        lender takes a commission back because

        the borrower defaulted very early.) `scheduled` means a payout date has
        been set. `paid` means the money has

        been sent to you. `reversed` means the lender clawed the commission
        back.


        These states describe where the commission is in the process. They do
        not mean O.J. holds money for you the

        way a bank would.


        The account the money goes to is set once, by a person at your company,
        during onboarding on an O.J.-hosted

        page. That page also collects your tax form (W-9 or W-8) and runs
        sanctions screening. The destination

        cannot be changed through the API, and an AI agent using your account
        can read payouts but cannot change

        where they go. O.J. issues 1099-NEC forms at year end.
      enum:
        - estimated
        - pending
        - received
        - held
        - scheduled
        - paid
        - reversed
    Payout:
      type: object
      description: >
        One referral's share of a commission, and where it is.


        `commission` is what the lender paid O.J. `oj_fee` is O.J.'s share and
        `partner_share` is yours. If you set

        `source.sub_partner_id` on the referral, `override_share` is the portion
        passed down to that sub-partner.

        `held_until` is the end of the lender's clawback window. `destination`
        shows the last four digits of the

        bank account on file. `statement_descriptor` is the text that appears on
        your bank statement.
      required:
        - id
        - referral_id
        - status
        - status_label
        - partner_share
        - updated_at
      properties:
        id:
          type: string
          examples:
            - po_01K5X5B2C7
        object:
          type: string
          const: payout
        referral_id:
          type: string
        status:
          $ref: '#/components/schemas/PayoutStatus'
        status_label:
          type: string
          examples:
            - Held until Nov 4
        lender:
          type: string
          description: Named once the deal has funded.
        funded_amount:
          $ref: '#/components/schemas/Money'
        commission:
          $ref: '#/components/schemas/Money'
        oj_fee:
          $ref: '#/components/schemas/Money'
        partner_share:
          $ref: '#/components/schemas/Money'
        override_share:
          $ref: '#/components/schemas/Money'
        held_until:
          type: string
          format: date
        scheduled_for:
          type: string
          format: date
        paid_at:
          type: string
          format: date-time
        reversed_at:
          type: string
          format: date-time
        reversal_reason:
          type: string
          examples:
            - 'Lender clawback: borrower defaulted within 30 days.'
        destination:
          type: object
          description: >-
            Read-only. Where the money goes; managed in hosted onboarding, never
            through the API.
          properties:
            rail:
              type: string
              enum:
                - ach
                - wire
                - stripe_connect
            last4:
              type: string
            name:
              type: string
              description: Account nickname you gave it.
        statement_descriptor:
          type: string
          examples:
            - OJ PAYOUT ref_01K5X3K7Q2
        updated_at:
          type: string
          format: date-time
    Money:
      type: integer
      description: >-
        A dollar amount expressed in whole US cents, so $85,000.00 is `8500000`.
        Cents avoid rounding errors that decimals cause in some languages.
    Error:
      type: object
      description: >
        RFC 9457 Problem Details, returned as `application/problem+json` with
        any 4xx or 5xx status. `type` is a

        URI that identifies the kind of problem and doubles as a link to its
        documentation; `title` is the short

        human name for that kind; `status` repeats the HTTP status; `detail`
        explains this occurrence for a

        developer; `instance` is the request path. Three extension members:
        `code`, a stable snake_case reason to

        branch on; `param`, the offending field when the request was invalid;
        `request_id`, to quote to support.

        One code deserves a note: `awaiting_approval` (HTTP 409) is not a
        failure. It means the action you asked

        for needs a person at your company to confirm it first, and the referral
        shows `needs_partner` until they do.
      required:
        - type
        - title
        - status
        - code
        - request_id
      properties:
        type:
          type: string
          format: uri
          examples:
            - https://api.meet-oj.com/problems/duplicate-external-id
        title:
          type: string
          examples:
            - Referral already exists
        status:
          type: integer
          examples:
            - 409
        detail:
          type: string
          examples:
            - >-
              A referral with external_id cust_8842 was created on 2026-09-20 as
              ref_01K5X3K7Q2.
        instance:
          type: string
          examples:
            - /partner/v0/referrals
        code:
          type: string
          description: >-
            Stable machine-readable reason. Categories are the prefixes;
            specific codes follow.
          examples:
            - invalid_request
            - authentication_failed
            - permission_denied
            - not_found
            - duplicate_external_id
            - business_already_referred
            - missing_consent
            - required_documents_missing
            - idempotency_key_reused
            - rate_limited
            - awaiting_approval
            - internal_error
        param:
          type: string
          description: The field that caused an invalid_request, in dot notation.
        request_id:
          type: string
          examples:
            - req_01K5X4A9M2
  parameters:
    Limit:
      name: limit
      in: query
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 25
    StartingAfter:
      name: starting_after
      in: query
      description: Cursor — the id of the last object on the previous page.
      schema:
        type: string
  headers:
    RequestId:
      description: >-
        Unique id for this request. Quote it to support; it is also in Problem
        Details as `request_id` and in O.J.'s traces.
      schema:
        type: string
        examples:
          - req_01K5X4A9M2
  responses:
    Error:
      description: Problem Details (RFC 9457)
      headers:
        OJ-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    oauth2:
      type: oauth2
      description: >-
        One client per partner per environment. Access tokens expire after 15
        minutes. Scopes are granted per client. Sandbox clients use
        https://sandbox.api.meet-oj.com/oauth/token.
      flows:
        clientCredentials:
          tokenUrl: https://api.meet-oj.com/oauth/token
          scopes:
            referrals:write: Create referrals and upload documents
            referrals:read: Read referrals, matches, document requests, offers, events
            match_checks:write: Run identity-free match checks
            sessions:write: Mint hosted-session links
            webhooks:manage: Register and list webhook endpoints
            payouts:read: >-
              Read payouts (your statement). There is no payouts:write;
              destinations are managed in hosted onboarding by a person.
            messages:read: Read a referral's conversation
            messages:write: >-
              Send messages into a referral's conversation on behalf of the
              partner or the borrower
            channels:manage: Register and remove channel connectors
            policy:manage: Read and change the partner policy
            submissions:read: >-
              For banks running a program. List and read submissions awaiting
              review
            submissions:write: For banks running a program. Record decisions and report funding

````