KashierDevelopersKashier Developers
Accounts and balance

Balance ledger and holds

Inspect the balance ledger, drill into individual records and payouts, and see what's on hold

Kashier keeps an immutable ledger of every balance-affecting event on your account — settlements, payouts, refunds, and adjustments each post a record. Use the balance ledger to reconcile your Kashier balance against your own books, and use the holds endpoint to see why your available balance can be lower than your total balance.

Ledger vs. account activity feed

This page covers the balance ledger under /v2/balance/* — immutable balance-affecting records (settlements, payouts, adjustments) plus holds. A separate, broader account activity feed also exists — see Get account records on the Accounts and payout methods page. Don't confuse the two — they return different record shapes for different purposes.

Get balance records (the ledger)

Returns a paginated list of balance-affecting records for an account — the core ledger.

Query parameters

KeyDescription
pagePage number for pagination. Example: 1
limitRecords per page. Example: 10
dateFromStart date for a date-range filter. Example: 2026-01-01
dateToEnd date for a date-range filter. Example: 2026-06-30
curl --location 'https://test-api.kashier.io/v2/balance/records/:accountId?page=1&limit=10' \
  --header 'Authorization: YOUR_TEST_SECRET_KEY'

Headers

KeyDescription
AuthorizationThe Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization.

Response

{
  "data": [
    {
      "accountId": "ACC-39550-436-01",
      "amount": 500,
      "originalAmount": 500,
      "fees": 0,
      "operation": "manualAdjustment",
      "origin": "operations team",
      "originReference": "REF-12345",
      "comment": "Manual adjustment",
      "valueDate": "2026-06-18",
      "isReflected": true,
      "totalBalanceBefore": 12000,
      "totalBalanceAfter": 12500,
      "createdAt": "2026-06-18T15:30:00Z"
    },
    {
      "accountId": "ACC-39550-436-01",
      "amount": 1000,
      "originalAmount": 1015,
      "fees": 15,
      "operation": "settlement",
      "origin": "settlements",
      "originReference": "STW-88213",
      "comment": "Settlement",
      "valueDate": "2026-06-18",
      "isReflected": true,
      "totalBalanceBefore": 11000,
      "totalBalanceAfter": 12000,
      "createdAt": "2026-06-18T14:00:00Z"
    }
  ],
  "total": 2,
  "page": 1,
  "limit": 10
}
FieldDescription
data[].accountIdThe account the record was posted against (ACC- format).
data[].amountNet amount after fees — this is what moves the balance.
data[].originalAmountGross amount before fees.
data[].feesFees deducted from originalAmount.
data[].operationWhat generated the record. Free text; values in use include refund, settlement, payout, deduct, transfer and manualAdjustment.
data[].originThe service that posted it, e.g. settlements, transfers, instant settlement.
data[].originReferenceThe originating reference (TRX-, STW-, STB-, ISR-, TRS-…). Together with accountId, operation and origin this forms the idempotency key.
data[].commentFree-text description of what generated the record.
data[].valueDateThe date the record is value-dated against.
data[].isReflectedfalse while the entry is future-dated and not yet applied to the balance.
data[].totalBalanceBefore / totalBalanceAfterBalance snapshots either side of the entry.
data[].createdAtWhen the record was created.
totalTotal number of records matching the filter.
pageCurrent page number.
limitRecords per page.

Get balance record details

Fetch the full detail of a single ledger record by its ID — use the id returned from the list above.

curl --location 'https://test-api.kashier.io/v2/balance/record-details/:recordId' \
  --header 'Authorization: YOUR_TEST_SECRET_KEY'

Headers

KeyDescription
AuthorizationThe Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization.

Response

{
  "accountId": "ACC-39550-436-01",
  "amount": 500,
  "originalAmount": 500,
  "fees": 0,
  "operation": "manualAdjustment",
  "origin": "operations team",
  "originReference": "REF-12345",
  "comment": "Manual adjustment",
  "valueDate": "2026-06-18",
  "totalBalanceBefore": 12000,
  "totalBalanceAfter": 12500,
  "metaData": { "fees": 0, "vat": 0 },
  "createdAt": "2026-06-18T15:30:00Z"
}

Fields match the ledger list above, plus metaData, which carries the fee/VAT breakdown for the record.

Get payout details

Given a ledger record that represents a payout, list the underlying transactions that were bundled into it.

Query parameters

KeyDescription
pagePage number for pagination. Example: 1
limitRecords per page. Example: 10
sortByField to sort by. Example: transactionDate
sortOrderSort order, asc or desc. Example: desc
statusFilter transactions by status. Example: completed
dateFromStart date for a date-range filter. Example: 2026-01-01
dateToEnd date for a date-range filter. Example: 2026-06-30
curl --location 'https://test-api.kashier.io/v2/balance/payout-details/:recordId?page=1&limit=10' \
  --header 'Authorization: YOUR_TEST_SECRET_KEY'

Headers

KeyDescription
AuthorizationThe Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization.

Response

{
  "recordId": "507f1f77bcf86cd799439029",
  "accountId": "507f1f77bcf86cd799439012",
  "amount": 5000,
  "status": "processed",
  "payoutDate": "2026-06-18",
  "transactions": [
    {
      "transactionId": "txn_001",
      "amount": 1000,
      "status": "settled",
      "settleDate": "2026-06-18"
    }
  ],
  "totalTransactions": 5
}

Export payout details

The same underlying data is also available as a file download.

KeyDescription
statusFilter transactions by status. Example: completed
dateFromStart date for a date-range filter. Example: 2026-01-01
dateToEnd date for a date-range filter. Example: 2026-06-30
curl --location 'https://test-api.kashier.io/v2/balance/payout-details/:recordId/export' \
  --header 'Authorization: YOUR_TEST_SECRET_KEY' \
  --output payout-details.xlsx

Get account holds

Returns holds placed on an account. Holds reduce your available balance without changing your total balance — this is why the amount you can withdraw or use can be less than your account's total balance.

Query parameters

KeyDescription
pagePage number for pagination. Example: 1
limitRecords per page. Example: 10
statusFilter by hold status: HELD, RELEASED or DEDUCTED
curl --location 'https://test-api.kashier.io/v2/hold/account/:accountId?page=1&limit=10' \
  --header 'Authorization: YOUR_TEST_SECRET_KEY'

Headers

KeyDescription
AuthorizationThe Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization.

Response

{
  "data": [
    {
      "holdId": "HLD-39550-436-0007",
      "accountId": "ACC-39550-436-01",
      "amount": 1000,
      "status": "HELD",
      "valueDate": "2026-06-18",
      "createdAt": "2026-06-18T10:30:00Z"
    }
  ],
  "total": 1,
  "page": 1,
  "limit": 10
}
FieldDescription
data[].holdIdUnique identifier for the hold (HLD- format).
data[].accountIdThe account the hold is placed against (ACC- format).
data[].amountThe amount held.
data[].statusHold lifecycle state: HELD, RELEASED or DEDUCTED.
data[].valueDateThe date the hold is value-dated against.
data[].createdAtWhen the hold was created.

Note

The status filter accepts the hold-lifecycle values HELD, RELEASED and DEDUCTED. A hold starts HELD; releasing it returns the amount to the available balance, deducting it removes the amount for good.

On this page