Skip to main content
sync_reporting_status is an additive, opt-in Reliable Reporting extension in current source. Published RC.1 implementations do not expose it. Sellers that implement it advertise consumer_status_task; the active breaking-change notice makes it required Core only in the next eligible minor after October 24, 2026.
sync_reporting_status closes the operational loop between what a seller says it published and what an authenticated buyer could actually consume. The buyer calls it on the seller through ordinary AdCP task transport. Buyers do not expose a reverse task endpoint, and sellers do not advertise a separate ingestion webhook. This task records consumer status, not measurement data. A statement carries no delivery metrics, attribution results, prices, invoices, or arbitrary observations about a user. It also is not a Reconciled Billing receipt: received proves only that the buyer consumed the exact Core revision binding, not that Managed materialization evidence or billing control totals matched. Request schema: sync-reporting-status-request.json Response schema: sync-reporting-status-response.json

Status values

Each immutable statement addresses one exact (authenticated consumer, account, delivery_config_id, delivery_config_version, report_definition_id, period) chain: obligation_missing is deliberately keyed without a seller-issued obligation ID. Requiring that ID would make the first missing report invisible again. The seller validates the period against the authenticated caller’s accepted configuration generation instead.

Example

The response returns one recorded, unchanged, or failed result per statement. Exact retries reuse both the batch idempotency key and immutable reporting_status_id. Reusing either identity with changed content is an idempotency conflict. When status changes, the buyer creates a new statement and names the current leaf in supersedes_reporting_status_id. For example, a later successful read supersedes revision_missing with received. The seller keeps both statements; only the new leaf is current. The seller atomically rejects a missing or stale supersession pointer, so concurrent updates cannot fork the chain. This preserves the outage instead of allowing a successful retry to erase it. Superseded history remains readable for at least the seller’s advertised status_retention_days; older expired statements may be pruned while identity reuse and stale supersession remain rejected. Ordinary authenticated rate and per-caller resource limits protect the ledger from pathological update churn.

Seller behavior

The seller:
  1. derives consumer identity from authenticated transport;
  2. validates configuration generation, report definition, and period without requiring an obligation to exist;
  3. verifies any seller snapshot ID and timestamp against the exact caller/account-scoped snapshot it issued;
  4. records the immutable status idempotently with atomic leaf supersession;
  5. exposes the caller’s history through get_reporting_status; and
  6. compares its current producer state with the buyer’s current status.
If the seller projects healthy or complete while the buyer’s current status conflicts, only that caller/account view becomes action_required with a stable CONSUMER_STATUS_MISMATCH issue. The seller assigns responsible_party from the diagnosed cause: seller production or publication, buyer access/configuration, or provider failure. One buyer’s statement never changes another buyer’s view or seller-advertised reliability statistics without corroboration. A conflict includes a negative status and a received status naming an older revision after the seller publishes a newer required restatement. The latter is the explicit signal that reporting changed after the buyer already read it.

Buyer behavior

When the seller advertises consumer_status_task, a buyer using that Reliable Reporting configuration automates this task for that configuration:
  • sync a failure promptly after its bounded retry/give-up window expires;
  • sync every later state change with explicit supersession; and
  • ensure every elapsed expected period has a current status before closing the reporting scope.
Missing buyer feedback remains unknown. It never excuses the seller’s obligation or changes the seller’s production SLA.

Relationship to billing receipts

sync_reporting_receipts is the stronger, optional Reconciled Billing operation. It requires a Managed materialization plus independently observed row counts, control totals, and the selected verification evidence. sync_reporting_status belongs to Core, can report a seller obligation that does not exist, and says nothing about invoice approval, payable amount, dispute waiver, or settlement.