Run reconciliation
Resolve charges left mid-lifecycle by crashes or unknown provider outcomes.
Pre-release · planned API
When a provider times out or a process dies between steps, a charge can be left reserved, settling, unknown, or refund_pending. toll.reconcile() resolves them by asking the provider — never by guessing.
const report = await toll.reconcile({ olderThanMs: 15 * 60_000 });
// { examined: 3, resolved: 2, pending: 1 }Schedule it
setInterval(() => void toll.reconcile(), 60_000);export default {
fetch: app.fetch,
scheduled: (_event, _env, ctx) => ctx.waitUntil(toll.reconcile()),
};What it does
| Charge | Action |
|---|---|
| reserved, handler not completed | Release — the service may not exist |
| reserved, handler completed | Settle |
| settling or unknown | Look up at the provider; record what happened, or retry, or release |
| settled, handler not completed | Refund — money moved before the service was confirmed |
| refund pending or unknown | Look up; record the refund or retry it |
olderThanMs must exceed your slowest handler, so reconciliation never acts on a request still running. Charges it cannot resolve stay pending and emit error events.