Skip to content

Money tab summary — receivables by departure date, executed refunds, decisions waiting

GET
/money/summary
curl --request GET \
--url https://quikstik-core.fly.dev/money/summary \
--header 'Authorization: Bearer <token>'

Core’s view of the money, not the ledger’s and not Stripe’s. Every figure is read from core’s own database (source: "core"); this read never opens the ledger database and never calls a payment processor. Revenue, cash-at-Stripe and the nightly tie are ledger facts and are not in this response. Stripe is the source of truth for “paid”; settled here is whatever core last synced from the ledger.

  • receivable is not revenue and not cash. It is the unpaid balance (gross - settled, the figure GET /obligations/{ref}/balance serves) on bookings that are not cancelled, grouped by departure date in the merchant timezone (tz), under the accrual law: an unpaid balance is a receivable, never on-site cash. Buckets: overdue (departed before today with a balance still owed), today, next_7 (tomorrow through today+7) and later (to the end of the window). All four always appear, in that order. parties counts obligations. When from is today or earlier, everything already overdue is included regardless of from; a from after today is a future-only window and omits overdue/today.
  • refunds counts refunds recorded in core’s executed-refund table over the trailing 7 and 30 days (independent of the window); total_minor is their sum.
  • decisions.held_sends is the number of outbound hub replies held for approval. decisions.tasks_money is the number of open tasks that are money decisions: kind refund_review, or approve_reply whose draft contains $. No refund_review writer exists yet, so today this counts only dollar-bearing reply approvals.
  • settled_synced_at_ms is when the last obligation-settled-sync run stamped ops_heartbeats; null while nothing records it (tracked in docs/DEFECTS.md).

Session, or an operator key scoped bookings.read. Window defaults: from = today, to = today + 14 (merchant timezone); at most 92 days (window_too_large, 422).

from
string format: date

Window start, a merchant-timezone calendar date (YYYY-MM-DD). Window is at most 92 days.

to
string format: date

Window end, inclusive (YYYY-MM-DD).

Core’s money summary for the window

Media typeapplication/json
object
from
required

Window start (merchant-timezone date).

string format: date
to
required

Window end, inclusive.

string format: date
tz
required

IANA zone the dates are read in.

string
source
required

Every figure is core’s view — not the ledger’s, not Stripe’s.

string
Allowed values: core
settled_synced_at_ms
required

When the last obligation-settled-sync run beat; null while nothing records it.

integer format: int64
nullable
receivable
required

Unpaid balances by departure date. Not revenue and not cash.

object
total_minor
required
integer format: int64
currency
required

ISO code of every figure here; null when there are no receivables.

string
nullable
parties
required
integer format: int64
by_bucket
required

Always four entries, in order overdue, today, next_7, later.

Array<object>
object
bucket
required

Departure-date bucket of an open receivable, relative to the merchant’s today.

string
Allowed values: overdue today next_7 later
total_minor
required

Sum of balances owed in this bucket, minor units. Core’s view; not revenue.

integer format: int64
parties
required

Number of obligations in this bucket.

integer format: int64
refunds
required
object
last_7
required
object
count
required
integer format: int64
total_minor
required

Sum of executed refunds recorded in core, minor units.

integer format: int64
last_30
required
object
count
required
integer format: int64
total_minor
required

Sum of executed refunds recorded in core, minor units.

integer format: int64
decisions
required
object
held_sends
required
integer format: int64
tasks_money
required
integer format: int64

Example

{
"tz": "America/New_York",
"source": "core",
"receivable": {
"by_bucket": [
{
"bucket": "overdue"
}
]
}
}

Missing or invalid session bearer token

Media typeapplication/json
object
reason
required

Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).

string

Example

{
"reason": "sold_out"
}

The session’s effect authority does not cover this operation

Media typeapplication/json
object
reason
required

Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).

string

Example

{
"reason": "sold_out"
}

Invalid query. reason is one of invalid_date, invalid_window (from after to), window_too_large (more than 92 days), invalid_limit, invalid_bucket.

Media typeapplication/json
object
reason
required

Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).

string

Example

{
"reason": "sold_out"
}

No durable backend is wired for this operation (fail-closed)

Media typeapplication/json
object
reason
required

Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).

string

Example

{
"reason": "sold_out"
}