Mutation reference

Integration Partners
Last Updated: August 13, 2026

Before you begin: Complete Build a gRPC RTD service. Mutations are the outputs your GetMutations handler returns.

Note: This reference applies whether your container is hosted in Index Cloud or on your own infrastructure (partner-hosted). The fields and privacy rules described here are the same for both deployment models.

Real-time mutations are sell-side decisioning inputs that enrich and inform Index Exchange (Index) auctions in the milliseconds leading up to bid submission. All mutations share the same structure: intent, path, op, and value, shown in protojson format. Mutations are atomic: if a mutation fails validation or execution, no changes are applied for that mutation.

General conditions

The following conditions apply to all mutations:

Activate a deal

Activate a deal for a specific impression opportunity. This enables impression-level deal activation: deals can be selectively activated for high-value or strategic impression opportunities based on user context, content signals, or demand conditions, ensuring preferred buyers are exposed only to impressions that align with campaignClosed A collection of multiple ads in different formats. goals.

FieldValue

intent

ACTIVATE_DEALS

path

/imp/<impId>

op

OPERATION_ADD

value

IDsPayload.ids(<dealId>)

Note: The deal must already be eligible to transact: active, within start and end dates, and properly configured in Index.

The following example activates deal deal123 for impression imp123:

{
   "intent": "ACTIVATE_DEALS",
   "op": "OPERATION_ADD",
   "path": "/imp/imp123",
   "ids": { "id": ["deal123"] }
}

Suppress a deal

Prevent a deal from activating for a specific impression opportunity. Deals can be suppressed when an impression does not meet desired criteria, allowing publishers to avoid exposing low-value or non-ideal impressions to certain buyers and preserve deal performance for higher-quality opportunities.

FieldValue

intent

SUPPRESS_DEALS

path

/imp/<impId>

op

OPERATION_REMOVE

value

IDsPayload.ids(<dealId>)

Note: The deal must already be eligible to transact: active, within start and end dates, and properly configured in Index.

The following example suppresses deal deal123 for impression imp123:

{
   "intent": "SUPPRESS_DEALS",
   "op": "OPERATION_REMOVE",
   "path": "/imp/imp123",
   "ids": { "id": ["deal123"] }
}

Adjust deal floor

Modify the floorClosed A pricing control used by media owners and exchanges to set a minimum sale price on inventory. price of an activated deal before the bid requestClosed An OpenRTB request that is sent from a supply-side platform (SSP) or ad exchange to the DSP requesting a bid response for potential impressions. A bid request contains information about the impression that allows the DSP to decide whether to bid on the impression. is sent to the DSP. This enables dynamic value optimization at impression time: floors can be raised for high-value impressions to maximize yield, or lowered for lower-value impressions to improve cost efficiency while maintaining competitiveness.

FieldValue

intent

ADJUST_DEAL_FLOOR

path

/imp/<impId>/deal/<dealId>

op

OPERATION_REPLACE

value

AdjustDealPayload

Note: The following conditions apply:

  • The floor price must be between 0.01 and 655.35.

  • Programmatic Guaranteed deal floors cannot be adjusted.

  • If multiple adjustments target the same deal, the last mutation wins.

  • If the suggested floor is lower than the publisher's floor in the inbound ad request, Index continues using the publisher's signaled floor.

The following example sets the floor of deal deal123 to $5.00 for impression imp123:

{
   "intent": "ADJUST_DEAL_FLOOR",
   "op": "OPERATION_REPLACE",
   "path": "/imp/imp123/deal/deal123",
   "adjustDeal": { "bidfloor": 5.00 }
}

Activate segments

Activate user segments required for deal activation for a specific impression opportunity. This allows required user segments to be activated in real time so that eligible deals can activate for a given impression. Partners may prefer to activate deals directly using ACTIVATE_DEALS when more explicit and predictable control is required.

FieldValue

intent

ACTIVATE_SEGMENTS

path

/user/data/segment

op

OPERATION_ADD

value

IDsPayload.ids(<segmentId>)

Note: Segment activation may have no effect if the segment is already activated through another workflow.

The following example activates segments segment111 and segment222 using separate mutations:

{
   "intent": "ACTIVATE_SEGMENTS", "op": "OPERATION_ADD",
   "path": "/user/data/segment", "ids": { "id": ["segment111"] }
},
{
   "intent": "ACTIVATE_SEGMENTS", "op": "OPERATION_ADD",
   "path": "/user/data/segment", "ids": { "id": ["segment222"] }
}

Add Extended Content IDs

Pass approved Extended Content IDs in the real-time data integration request for a specific impression opportunity. This allows approved content information to be added to an impression in real time, giving buyers more context to make better bidding decisions without requiring publishers to change their existing integrations.

FieldValue

intent

ADD_CIDS

path

/site/content/data or /app/content/data

op

OPERATION_ADD

value

DataPayload.data

Note: Content data names must be allowlisted with Index before they can be added. Contact your Index representative to request that additional content data names be added to the allowlist.

The following example adds two Extended Content IDs to the site content object:

{
   "intent": "ADD_CIDS",
   "op": "OPERATION_ADD",
   "path": "/site/content/data",
   "contentData": {
      "data": [{ "name": "example-container", "ext": { "cids": ["EX0000000000", "EZ0000000000"] } }]
   }
}

Shade a bid

Recommend a lower transaction price for a specific DSP bid, before Index selects a winner. The DSP pays the shaded price. This applies to first-price auctions only. Your container evaluates each DSP bid using your models and historical clearing prices, and returns a lower recommended price, reducing buyer cost without reducing win rates.

FieldValue

intent

BID_SHADE

op

OPERATION_REPLACE

path

/seatbid/<seatID>/bid/<bidID>

value

AdjustBidPayload. Contains adjustBid.price (float, CPMClosed Cost Per Thousand (CPM). A pricing structure for buying impressions and is the cost of serving an advertisement 1,000 times. Also known as Cost Per Mille (where M represents 1,000 in Roman numerals) or Cents Per Mille. USD).

Extension point

LIFECYCLE_DSP_BID_RESPONSE only

Auction typeClosed The RTB auction type and can be either a first price auction (an auction where the highest bid wins, and the winner pays the highest bid amount in full) or a fixed price auction (an auction that has priority over all other auction bid types and the bid must meet or exceed the pre-determined fixed price).

First-price only. No effect in second-price auctions.

Note: For the business rules governing bid shading (price constraints, floor behavior, deal ownership), the handler implementation pattern, and the testing checklist, see Implementing bid shading.

The following example shades bid 456 on seat 123 to $1.85:

{
   "intent": "BID_SHADE",
   "op": "OPERATION_REPLACE",
   "path": "/seatbid/123/bid/456",
   "adjustBid": { "price": 1.85 }
}