Pandabase
Ledger

Holds and scheduled transactions

Reserve funds for later use or schedule a transaction.

Ledger is in alpha. There are no Ledger fees during alpha.

A hold reserves funds now. A scheduled transaction attempts to post entries later. Use a hold when the funds must stay available for a specific operation.

Create a hold

A hold reduces the available balance without creating a pending transaction. You can capture it once, release it by voiding it, or let it expire.

FieldDescription
account_idRequired. The account whose funds are reserved.
amountRequired. The positive amount to reserve.
expires_atRequired. When the hold can no longer be captured.
descriptionWhat the reservation is for.
{
  "account_id": "acct_...",
  "amount": "10000",
  "description": "Order reservation",
  "expires_at": "2030-01-01T00:00:00Z"
}

Capture a hold

Capturing creates a ledger transaction for up to the held amount. The destination account must use the same ledger and currency.

{
  "destination_account_id": "acct_...",
  "amount": "6240",
  "description": "Order completed"
}

Capturing releases the whole hold, including any unused amount. In this example, $100 was held and $62.40 captured, so the remaining $37.60 becomes available again.

Release a hold

OutcomeWhat happens
VoidedYou release the hold. No transaction is created.
ExpiredThe hold passes expires_at and can't be captured, even before its status updates.

A hold's status is pending, captured, voided, or expired.

Scheduled transactions

Set execute_at alongside the usual transaction fields to schedule a transaction. It runs at or after that time.

{
  "execute_at": "2030-01-01T00:00:00Z",
  "description": "Monthly interest",
  "entries": [
    { "account_id": "acct_interest...", "side": "debit", "amount": "1000" },
    { "account_id": "acct_income...", "side": "credit", "amount": "1000" }
  ]
}

Scheduling doesn't reserve funds. Account and balance checks happen when the schedule runs, so it can fail if funds are no longer available.

A schedule has one of four statuses: scheduled, executed, failed, or canceled. You can cancel it only while it is scheduled.

Schedules can't be edited or retried. If one fails, read its failure reason before creating a replacement with a new idempotency key.

Last updated on

On this page