Skip to content

SENSOR_LOCATION

The position parameters require a device with the SENSOR_LOCATION sensor — the sensor that reports where the player is. On a device without it, any of them is rejected (400).

Param Carries
retail_grocery_zone The zone within a grocery store the player is in, e.g. the check-out area.
retail_mall_zone The zone within a mall the player is in.
aisle The grocery product aisle the player is at.

Each is single-valued: a player is in one place at a time. The two zone parameters are mutually exclusive — a player is in a grocery store or a mall, not both.

retail_grocery_zone=<VENUE_RETAIL_GROCERY_*>
retail_mall_zone=<VENUE_RETAIL_MALLS_*>
aisle=<AISLE_*>

These are the same names and values a fixed screen carries on placement.retail_grocery_zone / placement.retail_mall_zone and placement.aisles, so a moving player and a fixed screen describe a position identically. The venue is not sent: it follows from which zone parameter you use, and the store follows from the device’s location.

retail_grocery_zone

Zone Value
Entrance VENUE_RETAIL_GROCERY_ENTRANCE
Check-out VENUE_RETAIL_GROCERY_CHECK_OUT
Aisles VENUE_RETAIL_GROCERY_AISLES
Exterior VENUE_RETAIL_GROCERY_EXTERIOR

retail_mall_zone

Zone Value
Concourse VENUE_RETAIL_MALLS_CONCOURSE
Food court VENUE_RETAIL_MALLS_FOOD_COURT
Spectacular VENUE_RETAIL_MALLS_SPECTACULAR

Each parameter accepts only zones from its own venue, and the *_UNSPECIFIED value of either is rejected (400) — sending a parameter at all means naming a specific zone. Grocery and mall are the only venues with zones today; see the Ads API reference for the full enums.

For aisle, any Aisle value applies — AISLE_PRODUCE, AISLE_DAIRY, AISLE_BAKERY, AISLE_FROZEN, AISLE_BEVERAGE, AISLE_MEAT, and the rest. Aisles exist in grocery only.

An aisle belongs to the grocery Aisles zone, so sending aisle alone implies that zone:

Request Position it describes
aisle=AISLE_DAIRY Grocery, in the aisles, at dairy — the zone is inferred
retail_grocery_zone=VENUE_RETAIL_GROCERY_AISLES&aisle=AISLE_DAIRY The same; the aisle refines the zone
retail_grocery_zone=VENUE_RETAIL_GROCERY_CHECK_OUT Grocery, at the check-out, no aisle
retail_mall_zone=VENUE_RETAIL_MALLS_FOOD_COURT A mall food court

Two combinations are rejected (400):

Request Why
retail_grocery_zone=VENUE_RETAIL_GROCERY_CHECK_OUT&aisle=AISLE_DAIRY Contradictory — an aisle requires the Aisles zone.
retail_mall_zone=VENUE_RETAIL_MALLS_CONCOURSE&aisle=AISLE_DAIRY Aisles are grocery-only.

The position is compared against a flight’s venue targeting, and matching is hierarchical — a coarser selection admits a more specific position:

Flight targets aisle=AISLE_DAIRY matches grocery check-out matches
Retail (whole category) yes yes
Grocery yes yes
Grocery → Aisles yes no
Grocery → Aisles → Dairy yes no
Grocery → Check-out no yes

A flight targeting a mall zone never matches a grocery position, and the reverse.

An online request from a handheld at the dairy aisle:

GET /v1alpha2/ads?playerid=screen-01&key=retailer-acme&aisle=AISLE_DAIRY HTTP/1.1
Accept: application/xml

At the check-out instead:

GET /v1alpha2/ads?playerid=screen-01&key=retailer-acme&retail_grocery_zone=VENUE_RETAIL_GROCERY_CHECK_OUT

In a mall food court:

GET /v1alpha2/ads?playerid=screen-01&key=retailer-acme&retail_mall_zone=VENUE_RETAIL_MALLS_FOOD_COURT

Combined with the other inline signals — each facet is independent:

GET /v1alpha2/ads?playerid=screen-01&key=retailer-acme&aisle=AISLE_DAIRY&products=sku-123&seg=50.5:1

A SENSOR_LOCATION device that omits these parameters has no position for that request. It still gets a decision, but only from flights with no venue targeting — anything targeting a venue, zone, or aisle is skipped. Send the position whenever you have it; omit it to fall back to untargeted ads.