Skip to main content

Migrating signals

AdCP 3.0 rc.1 makes three changes to the Signals Protocol: delivery target flattening, structured pricing options, and usage reporting simplification.

Deliver-to flattening

The nested deliver_to object in get_signals requests is replaced by two top-level fields. beta.3:
test=false
rc.1:
test=false

Pricing options

The legacy pricing object (with a single cpm field) is replaced by a pricing_options array. Each option is a discriminated union on model.

Three pricing models

CPM — Fixed cost per thousand impressions:
Percent of media — Percentage of media spend, with optional CPM cap:
Flat fee — Fixed charge per reporting period (monthly licensed segments):

Activation with pricing

When activating a signal, pass the selected pricing_option_id:
test=false

Usage reporting

report_usage adds idempotency_key and removes the kind and operator_id fields. rc.1 usage report:
The pricing_option_id in the usage record must match the one passed at activation, allowing the vendor to verify the correct rate was applied.

Migration steps

1

Flatten deliver_to

Move deliver_to.destinations and deliver_to.countries to top-level fields in get_signals requests.
2

Parse pricing_options array

Update signal response parsing to read pricing_options (array) instead of pricing (object). Switch on model field to determine the pricing type.
3

Select pricing at activation

When calling activate_signal, pass the selected pricing_option_id from the signal’s pricing_options array.
4

Add idempotency_key to report_usage

Generate a unique key (UUID) for each report_usage call. Retries with the same key are idempotent.
5

Remove kind and operator_id

Remove kind and operator_id from usage records. Usage type is determined by the presence of signal_agent_segment_id (signals) or standards_id (governance).
6

Track pricing_option_id through lifecycle

Store the pricing_option_id at activation time and pass it in report_usage records so the vendor can verify billing.
7

Validate against schemas

Run requests against get-signals-request.json, activate-signal-request.json, and report-usage-request.json schemas.

Signals Protocol

Full reference for signal discovery, activation, usage reporting, and pricing models.

Related: Pricing | Optimization goals | AdCP 3.0 overview