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

# List Pending Payments

> List invoices awaiting action on your account: milestone funding you owe, or payouts in flight.

Lists incomplete invoices visible to your account, newest first. This is a strictly read-only surface — it never releases funds, refunds charges, or changes payment settings.

Each entry is shown from your perspective: `PENDING_FUNDING` means a funding invoice awaits payment on your side (as the employer), `PENDING_PAYOUT` means a payout to you is in flight (relevant when the token owner is also paid as an AI trainer). Use [`GET /approvals/{id}`](/docs/developers/api-reference/approvals/get) and [`GET /updates`](/docs/developers/api-reference/updates/poll) to track the co-sign approvals that resolve funding items.

**Requirements:** `payments:read` scope. Works pre-claim. No parameters.

## Response

<ResponseField name="payments" type="object[]">
  <Expandable title="pending payment entry">
    <ResponseField name="id" type="string">
      Invoice ID.
    </ResponseField>

    <ResponseField name="status" type="string">
      `PENDING_FUNDING` (you owe an escrow payment) or `PENDING_PAYOUT` (a payout to you is in flight).
    </ResponseField>

    <ResponseField name="invoiceKind" type="string">
      `FUNDING` or `PAYOUT`.
    </ResponseField>

    <ResponseField name="viewerRole" type="string">
      Your role on the invoice: `EMPLOYER`, `FREELANCER`, or `BOTH`.
    </ResponseField>

    <ResponseField name="amountUsd" type="number | null">
      Invoice amount in USD.
    </ResponseField>

    <ResponseField name="createdAt" type="string">
      ISO creation timestamp.
    </ResponseField>

    <ResponseField name="invoiceNumber" type="number | null">
      Sequential invoice number.
    </ResponseField>

    <ResponseField name="job" type="object">
      `{id, title}` of the linked job (`null` fields when not job-linked).
    </ResponseField>

    <ResponseField name="milestone" type="object">
      `{id, name}` of the linked milestone (`null` fields when not milestone-linked).
    </ResponseField>
  </Expandable>
</ResponseField>

## Errors

| Status | `code`         | Meaning                       |
| ------ | -------------- | ----------------------------- |
| `401`  | `UNAUTHORIZED` | Missing or invalid token      |
| `403`  | `FORBIDDEN`    | Missing `payments:read` scope |

<RequestExample>
  ```bash curl theme={null}
  curl -sS https://app.opentrain.ai/api/public/v1/payments/pending \
    -H "Authorization: Bearer $OT_API_TOKEN"
  ```

  ```bash CLI theme={null}
  opentrain payments pending --json
  ```

  ```json MCP: opentrain_list_pending_payments theme={null}
  {}
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "payments": [
      {
        "id": "<INVOICE_ID>",
        "status": "PENDING_FUNDING",
        "invoiceKind": "FUNDING",
        "viewerRole": "EMPLOYER",
        "amountUsd": 300,
        "createdAt": "2026-06-12T10:05:00.000Z",
        "invoiceNumber": 1042,
        "job": {
          "id": "<JOB_ID>",
          "title": "Spanish tweet sentiment labeling"
        },
        "milestone": {
          "id": "<MILESTONE_ID>",
          "name": "First labeling batch"
        }
      }
    ]
  }
  ```
</ResponseExample>
