Tollstile

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

Node
setInterval(() => void toll.reconcile(), 60_000);
Cloudflare Workers
export default {
  fetch: app.fetch,
  scheduled: (_event, _env, ctx) => ctx.waitUntil(toll.reconcile()),
};

What it does

ChargeAction
reserved, handler not completedRelease — the service may not exist
reserved, handler completedSettle
settling or unknownLook up at the provider; record what happened, or retry, or release
settled, handler not completedRefund — money moved before the service was confirmed
refund pending or unknownLook 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.

On this page