# Payouts and balance API

> Read your payouts and your payments balance with the Anytime Capital Payments API: status, amount, bank trace number and expected arrival, read only.

Source: https://anytime-capital.com/docs/payouts-api · Markdown: https://anytime-capital.com/docs/payouts-api.md · All docs: https://anytime-capital.com/docs/llms-full.txt

Your payouts to your bank, and the balance behind them, for reconciling deposits and forecasting cash. These endpoints only read: payouts are made from **Payouts** in the dashboard by owners and admins, and no API key or AI assistant can move money out of your balance. The list's `nextCursor` is opaque: pass it back exactly as it came. For every payout option and speed, see [Payout options](https://anytime-capital.com/docs/payouts.md).

| Topic | Detail |
| --- | --- |
| Endpoints | [`GET /api/v1/payouts`](#list-payouts), [`GET /api/v1/payouts/{id}`](#get-payout), [`GET /api/v1/balance`](#get-balance) |
| Key permissions | `payouts:read` |
| Samples | curl; Node.js 18+ with the built-in `fetch` (in an ES module); the [Node SDK](https://anytime-capital.com/docs/node-sdk.md) (preview: not on npm yet); Python with `requests`. |
| Every request can also answer | 401 `UNAUTHORIZED`, 401 `API_KEY_EXPIRED`, 403 `NOT_ENROLLED`, 403 `PERMISSION_DENIED`, 403 `IP_NOT_ALLOWED`, 429 `RATE_LIMITED`, 500 `INTERNAL_ERROR`. See [Error codes](https://anytime-capital.com/docs/error-codes.md). |

## The payout object

```json
{
  "object": "payout",
  "livemode": true,
  "id": "wdrl_5Tz8QwN2xYb6RcD1",
  "status": "completed",
  "amountCents": 482500,
  "netCents": 482500,
  "currency": "usd",
  "method": "Chase checking",
  "speed": "standard",
  "automatic": true,
  "estimatedArrival": "2026-10-22T16:00:00.000Z",
  "traceCode": "021000021234567",
  "failureMessage": null,
  "createdAt": "2026-10-20T16:00:00.000Z"
}
```

| Field | Type | Description |
| --- | --- | --- |
| `object` | string | The type of object. Always `payout`. |
| `livemode` | boolean | False for test-mode data (an `ak_test_` key); true for live data. |
| `id` | string | `wdrl_…` |
| `status` | string | `requested`, `in_review`, `processing`, `completed`, `reversed`, `canceled`, `failed`, `denied`, `unknown`. `completed` means it was sent; `reversed` that it came back. |
| `amountCents` | integer or null | Taken from the balance. Integer cents. |
| `netCents` | integer or null | What reaches the bank. Integer cents. |
| `currency` | string | usd. |
| `method` | string or null | Where it went, e.g. “Chase checking”. |
| `speed` | string or null | One of `standard`, `instant`. |
| `automatic` | boolean or null | Sent on the automatic schedule. |
| `estimatedArrival` | string (date-time) or null | Expected at the bank. |
| `traceCode` | string or null | The trace number your bank can find the deposit by. Match it, with `netCents`, against your bank feed. |
| `failureMessage` | string or null | Why it failed or came back. |
| `createdAt` | string (date-time) | Created. |

## The balance object

```json
{
  "object": "balance",
  "livemode": true,
  "currency": "usd",
  "availableCents": 128400,
  "pendingCents": 54200,
  "reserveCents": 0
}
```

| Field | Type | Description |
| --- | --- | --- |
| `object` | string | The type of object. Always `balance`. |
| `livemode` | boolean | False for test-mode data (an `ak_test_` key); true for live data. |
| `currency` | string | usd. |
| `availableCents` | integer | Ready to pay out. Integer cents. |
| `pendingCents` | integer | Not settled yet. Integer cents. |
| `reserveCents` | integer | Held in reserve. Integer cents. |

## Endpoints

### List payouts

`GET /api/v1/payouts`

Permission: `payouts:read`.

Payouts to the business's bank, newest first. The cursor is opaque.

**Query**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `limit` | integer | no | How many objects per page, 1–100. Default 25. See [Pagination](https://anytime-capital.com/docs/pagination.md). |
| `cursor` | string | no | The previous page's `nextCursor`, for the page after it. |

**Request (curl)**

```bash
curl "https://anytime-capital.com/api/v1/payouts?limit=10" \
  -H "Authorization: Bearer $ANYTIME_API_KEY"
```

**Request (Node.js)**

```javascript
const res = await fetch("https://anytime-capital.com/api/v1/payouts?limit=10", {
  headers: { Authorization: `Bearer ${process.env.ANYTIME_API_KEY}` },
});
const page = await res.json();
if (!res.ok) throw new Error(`${page.error.code}: ${page.error.message}`);
```

**Request (Node SDK)**

```typescript
import { AnytimeCapital } from "@anytimecapital/node";

const client = new AnytimeCapital({ apiKey: process.env.ANYTIME_API_KEY! });

const page = await client.payouts.list({ limit: 10 });
```

**Request (Python)**

```python
import os

import requests

res = requests.get(
    "https://anytime-capital.com/api/v1/payouts",
    headers={"Authorization": f"Bearer {os.environ['ANYTIME_API_KEY']}"},
    params={"limit": "10"},
    timeout=30,
)
page = res.json()
if not res.ok:
    raise RuntimeError(f"{page['error']['code']}: {page['error']['message']}")
```

**Response** (200)

```json
{
  "object": "list",
  "data": [
    {
      "object": "payout",
      "livemode": true,
      "id": "wdrl_5Tz8QwN2xYb6RcD1",
      "status": "completed",
      "amountCents": 482500,
      "netCents": 482500,
      "currency": "usd",
      "method": "Chase checking",
      "speed": "standard",
      "automatic": true,
      "estimatedArrival": "2026-10-22T16:00:00.000Z",
      "traceCode": "021000021234567",
      "failureMessage": null,
      "createdAt": "2026-10-20T16:00:00.000Z"
    }
  ],
  "hasMore": false,
  "nextCursor": null
}
```

**Errors**

| Status | Code | When |
| --- | --- | --- |
| 400 | `INVALID_INPUT` | A field, filter, `limit` or `cursor` is missing or invalid. The message starts with the field's name, as in `amountCents: …`, or reads `Invalid cursor.` Fix the named field. Don't retry the same request unchanged. |
| 502 | `PROCESSOR_ERROR` | The payments network didn't answer in time. Retry with the same `Idempotency-Key`. A refund is keyed at the network by that key too, so a retry never refunds twice. |
| 503 | `NOT_CONFIGURED` | The part of Anytime Capital Payments this needs isn't available right now. Retry later, with the same `Idempotency-Key` on a write. |

### Get a payout

`GET /api/v1/payouts/{id}`

Permission: `payouts:read`.

One payout.

**Path**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes | `wdrl_…` |

**Request (curl)**

```bash
curl https://anytime-capital.com/api/v1/payouts/wdrl_5Tz8QwN2xYb6RcD1 \
  -H "Authorization: Bearer $ANYTIME_API_KEY"
```

**Request (Node.js)**

```javascript
const res = await fetch("https://anytime-capital.com/api/v1/payouts/wdrl_5Tz8QwN2xYb6RcD1", {
  headers: { Authorization: `Bearer ${process.env.ANYTIME_API_KEY}` },
});
const payout = await res.json();
if (!res.ok) throw new Error(`${payout.error.code}: ${payout.error.message}`);
```

**Request (Node SDK)**

```typescript
import { AnytimeCapital } from "@anytimecapital/node";

const client = new AnytimeCapital({ apiKey: process.env.ANYTIME_API_KEY! });

const payout = await client.payouts.retrieve("wdrl_5Tz8QwN2xYb6RcD1");
```

**Request (Python)**

```python
import os

import requests

res = requests.get(
    "https://anytime-capital.com/api/v1/payouts/wdrl_5Tz8QwN2xYb6RcD1",
    headers={"Authorization": f"Bearer {os.environ['ANYTIME_API_KEY']}"},
    timeout=30,
)
payout = res.json()
if not res.ok:
    raise RuntimeError(f"{payout['error']['code']}: {payout['error']['message']}")
```

**Response** (200)

```json
{
  "object": "payout",
  "livemode": true,
  "id": "wdrl_5Tz8QwN2xYb6RcD1",
  "status": "completed",
  "amountCents": 482500,
  "netCents": 482500,
  "currency": "usd",
  "method": "Chase checking",
  "speed": "standard",
  "automatic": true,
  "estimatedArrival": "2026-10-22T16:00:00.000Z",
  "traceCode": "021000021234567",
  "failureMessage": null,
  "createdAt": "2026-10-20T16:00:00.000Z"
}
```

**Errors**

| Status | Code | When |
| --- | --- | --- |
| 404 | `NOT_FOUND` | No such object on your business (an id from another business reads the same), or no such endpoint under `/api/v1`, which still answers in JSON. Check the id and the path. Ids are case-sensitive. |
| 502 | `PROCESSOR_ERROR` | The payments network didn't answer in time. Retry with the same `Idempotency-Key`. A refund is keyed at the network by that key too, so a retry never refunds twice. |
| 503 | `NOT_CONFIGURED` | The part of Anytime Capital Payments this needs isn't available right now. Retry later, with the same `Idempotency-Key` on a write. |

### Get the balance

`GET /api/v1/balance`

Permission: `payouts:read`.

Available, pending and reserved, in USD cents. All zero before your first payment settles.

**Request (curl)**

```bash
curl https://anytime-capital.com/api/v1/balance \
  -H "Authorization: Bearer $ANYTIME_API_KEY"
```

**Request (Node.js)**

```javascript
const res = await fetch("https://anytime-capital.com/api/v1/balance", {
  headers: { Authorization: `Bearer ${process.env.ANYTIME_API_KEY}` },
});
const balance = await res.json();
if (!res.ok) throw new Error(`${balance.error.code}: ${balance.error.message}`);
```

**Request (Node SDK)**

```typescript
import { AnytimeCapital } from "@anytimecapital/node";

const client = new AnytimeCapital({ apiKey: process.env.ANYTIME_API_KEY! });

const balance = await client.balance.retrieve();
```

**Request (Python)**

```python
import os

import requests

res = requests.get(
    "https://anytime-capital.com/api/v1/balance",
    headers={"Authorization": f"Bearer {os.environ['ANYTIME_API_KEY']}"},
    timeout=30,
)
balance = res.json()
if not res.ok:
    raise RuntimeError(f"{balance['error']['code']}: {balance['error']['message']}")
```

**Response** (200)

```json
{
  "object": "balance",
  "livemode": true,
  "currency": "usd",
  "availableCents": 128400,
  "pendingCents": 54200,
  "reserveCents": 0
}
```

**Errors**

| Status | Code | When |
| --- | --- | --- |
| 502 | `PROCESSOR_ERROR` | The payments network didn't answer in time. Retry with the same `Idempotency-Key`. A refund is keyed at the network by that key too, so a retry never refunds twice. |
| 503 | `NOT_CONFIGURED` | The part of Anytime Capital Payments this needs isn't available right now. Retry later, with the same `Idempotency-Key` on a write. |

## Events

`payout.paid` when a payout to your bank is sent and `payout.failed` when one fails, is denied or comes back, each with the payout object. The [reconciliation guide](https://anytime-capital.com/docs/reconcile-payouts.md) puts these together in a nightly job.

---

Anytime Capital is a fintech company, not a bank. Payment processing, banking and payout services are provided by Anytime Capital's licensed partners. Rates shown are for US card payments; international cards, currency conversion and disputes may carry additional fees shown in your dashboard before you accept a payment.
