Reconciliation
Snapshots are truth. Reconcile against them on a schedule, independent of whether webhooks arrived.
The sweep
Run it on a timer, and again after any deploy or outage:
- Sweep the order book.
GET /v1/orders?status=...lists your non-terminal orders; check each against its snapshot so a missed webhook never becomes a stuck order. - Recover per order.
GET /v1/orders/{id}returns the authoritative snapshot includinglast_seq;GET /v1/events?order={id}&after_seq={n}replays what you missed.
Delivery actuals
Aired counts and delivered impressions come from the seller as delivery_post artifacts on the order: per-unit, per-week actuals in the declared currency, source-tagged. Audience guarantees reconcile against them; the platform carries the numbers, it never computes them.
Posting policy
A shortfall is arithmetic; whether it owes a make-good is policy. A package may state that policy, and then both sides compute the same answer. posting_policy carries aggregation_weeks (the window delivery totals over before shortfall is computed), threshold_pct (delivery at or above this percentage of the guarantee owes no make-good), and exclusions (the package_id references the policy does not cover: the tentpole carve-out). An agreement may override it, resolving as override(package_id) ?? override("*") ?? package.posting_policy ?? unstated. The overrides that apply are the ones on the agreement the order presented at create, read when the post lands rather than snapshotted: unlike the cancellation rights an order books under, a make-good trigger is the live term between the parties.
Evaluation is per line, never order-wide. One order may carry lines from packages with different windows, thresholds, and exclusions, so there is no single order-level policy to apply. Mixed-policy orders are legal. For each audience_guaranteed line, independently:
- Resolve the effective policy for that line's
package_id. - If that line's package sits in the policy's
exclusions, the line is excluded: no automatic determination, and its shortfall goes to the parties. Undecided is reported as undecided, never as "no make-good owed". - Total delivered impressions for that line from the order's
delivery_postartifacts over that policy'saggregation_weeks, in the line's declared audience currency. - Compare against that line's
impressions_goal. Satisfied whendelivered >= goal * (threshold_pct / 100), inclusive at the edge. Satisfied owes no make-good; not satisfied populates the line'sshortfalland the make-good path runs as it does today.
Worked once: a line guaranteeing 1,280,000 hh impressions under {"aggregation_weeks": 4, "threshold_pct": 90} needs 1,152,000 across its four posted weeks. 1,200,000 delivered is satisfied and owes nothing; 1,151,999 is not. Results report per line, exactly as unit acceptance already does: the order is never satisfied or unsatisfied as a whole. Where no policy is stated, behavior is exactly today's: the shortfall is reported and the decision stays with the parties.
Files and EDI
Sellers who live in traffic systems return actuals as the industry's own paper: station-generated EDI invoices and as-run log times land through the file interface and reconcile against orders, so billing stays in the systems both sides already trust.