An action currently available on a media buy, resolved against the buy's current status, negotiated terms, account tier, and any buy-level overrides. Authoritative per-buy capability — buyer SDKs MUST read this rather than re-deriving from the product's allowed_actions[], because divergence from the product template is expected (negotiated terms and IO addenda live on the deal, not the product SKU). The containing available_actions[] array is uniquely keyed by action; sellers MUST NOT emit two entries with the same action value (this is a contract-level invariant — JSON Schema uniqueItems only catches structurally identical objects, so validators MUST enforce action-uniqueness separately). Predicate evaluators consuming dotted paths like available_actions.extend_flight.sla.response_max MUST index by action rather than by array position. The mode and sla values are advisory at the moment of emission; sellers MAY resolve to a different mode by the time the mutation arrives (state can change), in which case the request is rejected with ACTION_NOT_ALLOWED (reason: mode_mismatch).
Optional pointer into buy-terms negotiation (forward-references the buy-terms namespace landing via separate RFC). Schema accepts any string for now and will tighten to a structured reference when the buy-terms RFC ships.
An action currently available on a media buy, resolved against the buy's current status, negotiated terms, account tier, and any buy-level overrides. Authoritative per-buy capability — buyer SDKs MUST read this rather than re-deriving from the product's
allowed_actions[], because divergence from the product template is expected (negotiated terms and IO addenda live on the deal, not the product SKU). The containingavailable_actions[]array is uniquely keyed byaction; sellers MUST NOT emit two entries with the sameactionvalue (this is a contract-level invariant — JSON SchemauniqueItemsonly catches structurally identical objects, so validators MUST enforce action-uniqueness separately). Predicate evaluators consuming dotted paths likeavailable_actions.extend_flight.sla.response_maxMUST index byactionrather than by array position. Themodeandslavalues are advisory at the moment of emission; sellers MAY resolve to a different mode by the time the mutation arrives (state can change), in which case the request is rejected withACTION_NOT_ALLOWED(reason: mode_mismatch).