Update or Insert device
Request Body
Section titled “Request Body”Device represents a physical or virtual screen / sensor deployed in a retail location.
object
The metadata of the device.
object
The unique identifier for the resource.
The name of the resource.
The timestamp when the resource was first created.
The timestamp when the resource was last updated.
The revision of the resource. Must be empty if the resource is not under version control.
object
The unique identifier for a particular revision of the resource.
The timestamp when this particular revision was created.
The unique identifier for the latest revision of the resource. Must be empty if this is already the latest revision.
The labels of the resource.
object
The location where this device is installed.
object
Deprecated. Use externalId instead. Setting this to the prefixed form
externalid:{value} is still supported, but prefer externalId going forward.
The location’s external id. The location doesn’t have to be one you created — the same physical store may already be registered by another partner.
Example
10000001The type of this device.
The operational status of the device.
The deployment this device belongs to.
object
The allocation targets of the deployment. A device carrying none at all is configured to serve nothing: it plays no guaranteed share and runs no bid round.
AllocationTarget wraps the concrete allocation target types inside a Deployment.
object
Static is an allocation target that routes a fixed percentage of impressions to one or more ad or content servers (e.g. on-site / venue-sourced).
object
Share of impressions to allocate (0–100).
object
Identifier of the referenced AdServer entity.
object
Any contains an arbitrary serialized protocol buffer message along with a
URL that describes the type of the serialized message.
Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type.
Example 1: Pack and unpack a message in C++.
Foo foo = ...;
Any any;
any.PackFrom(foo);
...
if (any.UnpackTo(&foo)) {
...
}
Example 2: Pack and unpack a message in Java.
Foo foo = ...;
Any any = Any.pack(foo);
...
if (any.is(Foo.class)) {
foo = any.unpack(Foo.class);
}
// or ...
if (any.isSameTypeAs(Foo.getDefaultInstance())) {
foo = any.unpack(Foo.getDefaultInstance());
}
Example 3: Pack and unpack a message in Python.
foo = Foo(...)
any = Any()
any.Pack(foo)
...
if any.Is(Foo.DESCRIPTOR):
any.Unpack(foo)
...
Example 4: Pack and unpack a message in Go
foo := &pb.Foo{...}
any, err := anypb.New(foo)
if err != nil {
...
}
...
foo := &pb.Foo{}
if err := any.UnmarshalTo(foo); err != nil {
...
}
The pack methods provided by protobuf library will by default use ‘type.googleapis.com/full.type.name’ as the type URL and the unpack methods only use the fully qualified type name after the last ’/’ in the type URL, for example “foo.bar.com/x/y.z” will yield type name “y.z”.
JSON
The JSON representation of an Any value uses the regular
representation of the deserialized, embedded message, with an
additional field @type which contains the type URL. Example:
package google.profile;
message Person {
string first_name = 1;
string last_name = 2;
}
{
"@type": "type.googleapis.com/google.profile.Person",
"firstName": <string>,
"lastName": <string>
}
If the embedded message type is well-known and has a custom JSON
representation, that representation will be embedded adding a field
value which holds the custom JSON in addition to the @type
field. Example (for message [google.protobuf.Duration][]):
{
"@type": "type.googleapis.com/google.protobuf.Duration",
"value": "1.212s"
}object
A URL/resource name that uniquely identifies the type of the serialized
protocol buffer message. This string must contain at least
one ”/” character. The last segment of the URL’s path must represent
the fully qualified name of the type (as in
path/google.protobuf.Duration). The name should be in a canonical form
(e.g., leading ”.” is not accepted).
In practice, teams usually precompile into the binary all types that they
expect it to use in the context of Any. However, for URLs which use the
scheme http, https, or no scheme, one can optionally set up a type
server that maps type URLs to message definitions as follows:
- If no scheme is provided,
httpsis assumed. - An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error.
- Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.)
Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. As of May 2023, there are no widely used type server implementations and no plans to implement one.
Schemes other than http, https (or the empty scheme) might be
used with implementation specific semantics.
NonStatic is an allocation target that routes whatever share the static targets do not guarantee to the bidding auction. Its presence is the signal: a device carrying no NonStatic target leaves that share undelivered rather than selling it.
object
A programmatic_percentage above 0 turns on every SSP of the device’s
tenant, so this list no longer selects sources. A NonStatic target must
still never be pruned for looking empty: its presence puts the device in the
auction.
object
Identifier of the referenced AdServer entity.
object
Any contains an arbitrary serialized protocol buffer message along with a
URL that describes the type of the serialized message.
Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type.
Example 1: Pack and unpack a message in C++.
Foo foo = ...;
Any any;
any.PackFrom(foo);
...
if (any.UnpackTo(&foo)) {
...
}
Example 2: Pack and unpack a message in Java.
Foo foo = ...;
Any any = Any.pack(foo);
...
if (any.is(Foo.class)) {
foo = any.unpack(Foo.class);
}
// or ...
if (any.isSameTypeAs(Foo.getDefaultInstance())) {
foo = any.unpack(Foo.getDefaultInstance());
}
Example 3: Pack and unpack a message in Python.
foo = Foo(...)
any = Any()
any.Pack(foo)
...
if any.Is(Foo.DESCRIPTOR):
any.Unpack(foo)
...
Example 4: Pack and unpack a message in Go
foo := &pb.Foo{...}
any, err := anypb.New(foo)
if err != nil {
...
}
...
foo := &pb.Foo{}
if err := any.UnmarshalTo(foo); err != nil {
...
}
The pack methods provided by protobuf library will by default use ‘type.googleapis.com/full.type.name’ as the type URL and the unpack methods only use the fully qualified type name after the last ’/’ in the type URL, for example “foo.bar.com/x/y.z” will yield type name “y.z”.
JSON
The JSON representation of an Any value uses the regular
representation of the deserialized, embedded message, with an
additional field @type which contains the type URL. Example:
package google.profile;
message Person {
string first_name = 1;
string last_name = 2;
}
{
"@type": "type.googleapis.com/google.profile.Person",
"firstName": <string>,
"lastName": <string>
}
If the embedded message type is well-known and has a custom JSON
representation, that representation will be embedded adding a field
value which holds the custom JSON in addition to the @type
field. Example (for message [google.protobuf.Duration][]):
{
"@type": "type.googleapis.com/google.protobuf.Duration",
"value": "1.212s"
}object
A URL/resource name that uniquely identifies the type of the serialized
protocol buffer message. This string must contain at least
one ”/” character. The last segment of the URL’s path must represent
the fully qualified name of the type (as in
path/google.protobuf.Duration). The name should be in a canonical form
(e.g., leading ”.” is not accepted).
In practice, teams usually precompile into the binary all types that they
expect it to use in the context of Any. However, for URLs which use the
scheme http, https, or no scheme, one can optionally set up a type
server that maps type URLs to message definitions as follows:
- If no scheme is provided,
httpsis assumed. - An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error.
- Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.)
Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. As of May 2023, there are no widely used type server implementations and no plans to implement one.
Schemes other than http, https (or the empty scheme) might be
used with implementation specific semantics.
Share of the device’s impressions that SSPs may take (0–100), on the same
basis as Static.percentage: both measure the whole device, so all of a
device’s shares together may not exceed 100.
A value above 0 turns on every SSP of the device’s tenant. They share one pool, not one share each. Until the SSPs have delivered this share, an SSP bid goes first. After that, price decides, so SSPs can exceed it, and they fall short when no SSP bids.
The ad networks this device sells its unguaranteed share through. They qualify the tenant’s own ad server, which the auction adds to every bid round and which keeps only flights booked in one of these, so a device carrying a NonStatic target must name at least one or that server has nothing it can serve.
Whether this device sells guaranteed deals. Guaranteed outranks the bid round, so a device that accepts it may serve a deal that is behind pace before any bidding happens; a device that declines skips guaranteed entirely and its pace is never read.
The least this device may be sold for, per completed playout. No ad plays below it on any deal type; CMS is the one exception, sitting outside the auction with no price at all.
Per playout, not per mille, so it is directly comparable with Flight.bid,
which the check before submit tests it against. A CPM bid is normalised to
per playout first (rate x impression_multiplier / 1000); the floor is never
rescaled. The currency must match the bid’s — the check compares, it does not
convert.
Unset means this device names no floor and takes
Project.defaultFloorPricePerPlayout; unset with no project default means no
floor. A message rather than a bare number so absent is distinguishable from
a deliberate zero.
object
The three-letter currency code defined in ISO 4217.
The whole units of the amount.
For example if currencyCode is "USD", then 1 unit is one US dollar.
Number of nano (10^-9) units of the amount.
The value must be between -999,999,999 and +999,999,999 inclusive.
If units is positive, nanos must be positive or zero.
If units is zero, nanos can be positive, zero, or negative.
If units is negative, nanos must be negative or zero.
For example $-1.75 is represented as units=-1 and nanos=-750,000,000.
The extra this device’s owner charges for selling its time in advance rather
than auctioning it, as a whole percent on top of the floor. A guaranteed
bid must beat floorPricePerPlayout x (100 + premium) / 100, per device and
per playout. 15 is a 15% uplift; 0 leaves the minimum at the floor. Not
bounded above.
Computed in fixed point over the floor’s nanos, rounded up, so a device is never sold below its own minimum. Guaranteed only — open-auction and SSP bids pay the floor.
Supported Ad types maps ad type names (e.g. “display”) to their accepted formats.
SupportedAdType holds the list of accepted formats for one ad type slot.
object
Ad-format ids this device can render, from the platform’s format catalogue. The supported ids are listed under Supported formats.
An id outside the catalogue is rejected as INVALID_ARGUMENT: the write fails
rather than storing a format that would match no creative.
Device unique external identifier, derived by the platform as
“{identifier.key}_{identifier.playerId}”.
Read-only: it cannot be assigned directly, and a value sent on a write is
ignored. Set identifier instead.
The device’s identity, and what externalId is derived from. key and
playerId are both required; key namespaces the player id. Required on the
first upsert; on a device that already exists it is ignored, so the
identity cannot be changed after creation.
object
Namespace for the player id.
Number of physical screens at this position.
Network operator / CMS partner that manages this device, e.g. “Viewento”.
Playout impression multipliers, per weekday and optional time range.
Leaving this empty defaults every playout to a factor of 1 — one playout counts as one impression — because a device with no curve is unconfigured, not measured at zero. Once any rule is present the list is read as a complete specification, and windows it does not cover resolve to a factor of 0.
Whether the store is open is a separate question, carried by Location.weeklyHours; do not encode closure here.
ImpressionFactor sets the playout impression multiplier for a recurring weekly window. An unset start/end means it applies to the whole day.
object
Represents a day of the week.
- DAY_OF_WEEK_UNSPECIFIED: The day of the week is unspecified.
- MONDAY: Monday
- TUESDAY: Tuesday
- WEDNESDAY: Wednesday
- THURSDAY: Thursday
- FRIDAY: Friday
- SATURDAY: Saturday
- SUNDAY: Sunday
Represents a time of day. The date and time zone are either not significant
or are specified elsewhere. An API may choose to allow leap seconds. Related
types are [google.type.Date][google.type.Date] and
google.protobuf.Timestamp.
object
Hours of a day in 24 hour format. Must be greater than or equal to 0 and typically must be less than or equal to 23. An API may choose to allow the value “24:00:00” for scenarios like business closing time.
Minutes of an hour. Must be greater than or equal to 0 and less than or equal to 59.
Seconds of a minute. Must be greater than or equal to 0 and typically must be less than or equal to 59. An API may allow the value 60 if it allows leap-seconds.
Fractions of seconds, in nanoseconds. Must be greater than or equal to 0 and less than or equal to 999,999,999.
Represents a time of day. The date and time zone are either not significant
or are specified elsewhere. An API may choose to allow leap seconds. Related
types are [google.type.Date][google.type.Date] and
google.protobuf.Timestamp.
object
Hours of a day in 24 hour format. Must be greater than or equal to 0 and typically must be less than or equal to 23. An API may choose to allow the value “24:00:00” for scenarios like business closing time.
Minutes of an hour. Must be greater than or equal to 0 and less than or equal to 59.
Seconds of a minute. Must be greater than or equal to 0 and typically must be less than or equal to 59. An API may allow the value 60 if it allows leap-seconds.
Fractions of seconds, in nanoseconds. Must be greater than or equal to 0 and less than or equal to 999,999,999.
Per-playout impression multiplier for this window. Fractional: DOOH hourly multipliers are derived as (hourly contacts / playouts) and are almost always non-integer, e.g. 3.33 (IDOOH/PuPS). Carry the exact value here and round only at aggregate/report time — never per playout.
Advertising-industry taxonomy categories that must not be served on this device.
Physical placement of the device within the venue (venue classification, zone, and product aisles). Owned directly by the device.
object
DOOH venue classification (parent + child tiers from OpenOOH v1.2.1).
The device’s zone within a grocery venue. Set this only when venue is a
grocery venue; on any other venue it is ignored.
Send at most one zone member. A request carrying both is rejected as
INVALID_ARGUMENT, even when the other is _UNSPECIFIED — omit the member
that does not apply rather than sending it unset.
The device’s zone within a mall venue. Set this only when venue is a mall
venue; on any other venue it is ignored.
Send at most one zone member. A request carrying both is rejected as
INVALID_ARGUMENT, even when the other is _UNSPECIFIED — omit the member
that does not apply rather than sending it unset.
Product aisles the device serves (e.g. PRODUCE, DAIRY). Grocery venues only.
Example
{ "aisles": [ "AISLE_DAIRY" ], "retailGroceryZone": "VENUE_RETAIL_GROCERY_AISLES", "venue": "VENUE_RETAIL_GROCERY"}The physical display panel. Required: a device whose panel size we do not hold cannot be described completely to an exchange that requires one.
object
Active display area in millimetres. Both are required together — one
without the other describes nothing. The diagonal SSPs ask for is derived
from these (hypot(width, height) / 25.4, rounded) and never stored, so
the two can never disagree.
Responses
Section titled “ Responses ”A successful response.
object
Device represents a physical or virtual screen / sensor deployed in a retail location.
object
The metadata of the device.
object
The unique identifier for the resource.
The name of the resource.
The timestamp when the resource was first created.
The timestamp when the resource was last updated.
The revision of the resource. Must be empty if the resource is not under version control.
object
The unique identifier for a particular revision of the resource.
The timestamp when this particular revision was created.
The unique identifier for the latest revision of the resource. Must be empty if this is already the latest revision.
The labels of the resource.
object
The location where this device is installed.
object
Deprecated. Use externalId instead. Setting this to the prefixed form
externalid:{value} is still supported, but prefer externalId going forward.
The location’s external id. The location doesn’t have to be one you created — the same physical store may already be registered by another partner.
The type of this device.
The operational status of the device.
The deployment this device belongs to.
object
The allocation targets of the deployment. A device carrying none at all is configured to serve nothing: it plays no guaranteed share and runs no bid round.
AllocationTarget wraps the concrete allocation target types inside a Deployment.
object
Static is an allocation target that routes a fixed percentage of impressions to one or more ad or content servers (e.g. on-site / venue-sourced).
object
Share of impressions to allocate (0–100).
object
Identifier of the referenced AdServer entity.
object
Any contains an arbitrary serialized protocol buffer message along with a
URL that describes the type of the serialized message.
Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type.
Example 1: Pack and unpack a message in C++.
Foo foo = ...;
Any any;
any.PackFrom(foo);
...
if (any.UnpackTo(&foo)) {
...
}
Example 2: Pack and unpack a message in Java.
Foo foo = ...;
Any any = Any.pack(foo);
...
if (any.is(Foo.class)) {
foo = any.unpack(Foo.class);
}
// or ...
if (any.isSameTypeAs(Foo.getDefaultInstance())) {
foo = any.unpack(Foo.getDefaultInstance());
}
Example 3: Pack and unpack a message in Python.
foo = Foo(...)
any = Any()
any.Pack(foo)
...
if any.Is(Foo.DESCRIPTOR):
any.Unpack(foo)
...
Example 4: Pack and unpack a message in Go
foo := &pb.Foo{...}
any, err := anypb.New(foo)
if err != nil {
...
}
...
foo := &pb.Foo{}
if err := any.UnmarshalTo(foo); err != nil {
...
}
The pack methods provided by protobuf library will by default use ‘type.googleapis.com/full.type.name’ as the type URL and the unpack methods only use the fully qualified type name after the last ’/’ in the type URL, for example “foo.bar.com/x/y.z” will yield type name “y.z”.
JSON
The JSON representation of an Any value uses the regular
representation of the deserialized, embedded message, with an
additional field @type which contains the type URL. Example:
package google.profile;
message Person {
string first_name = 1;
string last_name = 2;
}
{
"@type": "type.googleapis.com/google.profile.Person",
"firstName": <string>,
"lastName": <string>
}
If the embedded message type is well-known and has a custom JSON
representation, that representation will be embedded adding a field
value which holds the custom JSON in addition to the @type
field. Example (for message [google.protobuf.Duration][]):
{
"@type": "type.googleapis.com/google.protobuf.Duration",
"value": "1.212s"
}object
A URL/resource name that uniquely identifies the type of the serialized
protocol buffer message. This string must contain at least
one ”/” character. The last segment of the URL’s path must represent
the fully qualified name of the type (as in
path/google.protobuf.Duration). The name should be in a canonical form
(e.g., leading ”.” is not accepted).
In practice, teams usually precompile into the binary all types that they
expect it to use in the context of Any. However, for URLs which use the
scheme http, https, or no scheme, one can optionally set up a type
server that maps type URLs to message definitions as follows:
- If no scheme is provided,
httpsis assumed. - An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error.
- Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.)
Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. As of May 2023, there are no widely used type server implementations and no plans to implement one.
Schemes other than http, https (or the empty scheme) might be
used with implementation specific semantics.
NonStatic is an allocation target that routes whatever share the static targets do not guarantee to the bidding auction. Its presence is the signal: a device carrying no NonStatic target leaves that share undelivered rather than selling it.
object
A programmatic_percentage above 0 turns on every SSP of the device’s
tenant, so this list no longer selects sources. A NonStatic target must
still never be pruned for looking empty: its presence puts the device in the
auction.
object
Identifier of the referenced AdServer entity.
object
Any contains an arbitrary serialized protocol buffer message along with a
URL that describes the type of the serialized message.
Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type.
Example 1: Pack and unpack a message in C++.
Foo foo = ...;
Any any;
any.PackFrom(foo);
...
if (any.UnpackTo(&foo)) {
...
}
Example 2: Pack and unpack a message in Java.
Foo foo = ...;
Any any = Any.pack(foo);
...
if (any.is(Foo.class)) {
foo = any.unpack(Foo.class);
}
// or ...
if (any.isSameTypeAs(Foo.getDefaultInstance())) {
foo = any.unpack(Foo.getDefaultInstance());
}
Example 3: Pack and unpack a message in Python.
foo = Foo(...)
any = Any()
any.Pack(foo)
...
if any.Is(Foo.DESCRIPTOR):
any.Unpack(foo)
...
Example 4: Pack and unpack a message in Go
foo := &pb.Foo{...}
any, err := anypb.New(foo)
if err != nil {
...
}
...
foo := &pb.Foo{}
if err := any.UnmarshalTo(foo); err != nil {
...
}
The pack methods provided by protobuf library will by default use ‘type.googleapis.com/full.type.name’ as the type URL and the unpack methods only use the fully qualified type name after the last ’/’ in the type URL, for example “foo.bar.com/x/y.z” will yield type name “y.z”.
JSON
The JSON representation of an Any value uses the regular
representation of the deserialized, embedded message, with an
additional field @type which contains the type URL. Example:
package google.profile;
message Person {
string first_name = 1;
string last_name = 2;
}
{
"@type": "type.googleapis.com/google.profile.Person",
"firstName": <string>,
"lastName": <string>
}
If the embedded message type is well-known and has a custom JSON
representation, that representation will be embedded adding a field
value which holds the custom JSON in addition to the @type
field. Example (for message [google.protobuf.Duration][]):
{
"@type": "type.googleapis.com/google.protobuf.Duration",
"value": "1.212s"
}object
A URL/resource name that uniquely identifies the type of the serialized
protocol buffer message. This string must contain at least
one ”/” character. The last segment of the URL’s path must represent
the fully qualified name of the type (as in
path/google.protobuf.Duration). The name should be in a canonical form
(e.g., leading ”.” is not accepted).
In practice, teams usually precompile into the binary all types that they
expect it to use in the context of Any. However, for URLs which use the
scheme http, https, or no scheme, one can optionally set up a type
server that maps type URLs to message definitions as follows:
- If no scheme is provided,
httpsis assumed. - An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error.
- Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.)
Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. As of May 2023, there are no widely used type server implementations and no plans to implement one.
Schemes other than http, https (or the empty scheme) might be
used with implementation specific semantics.
Share of the device’s impressions that SSPs may take (0–100), on the same
basis as Static.percentage: both measure the whole device, so all of a
device’s shares together may not exceed 100.
A value above 0 turns on every SSP of the device’s tenant. They share one pool, not one share each. Until the SSPs have delivered this share, an SSP bid goes first. After that, price decides, so SSPs can exceed it, and they fall short when no SSP bids.
The ad networks this device sells its unguaranteed share through. They qualify the tenant’s own ad server, which the auction adds to every bid round and which keeps only flights booked in one of these, so a device carrying a NonStatic target must name at least one or that server has nothing it can serve.
Whether this device sells guaranteed deals. Guaranteed outranks the bid round, so a device that accepts it may serve a deal that is behind pace before any bidding happens; a device that declines skips guaranteed entirely and its pace is never read.
The least this device may be sold for, per completed playout. No ad plays below it on any deal type; CMS is the one exception, sitting outside the auction with no price at all.
Per playout, not per mille, so it is directly comparable with Flight.bid,
which the check before submit tests it against. A CPM bid is normalised to
per playout first (rate x impression_multiplier / 1000); the floor is never
rescaled. The currency must match the bid’s — the check compares, it does not
convert.
Unset means this device names no floor and takes
Project.defaultFloorPricePerPlayout; unset with no project default means no
floor. A message rather than a bare number so absent is distinguishable from
a deliberate zero.
object
The three-letter currency code defined in ISO 4217.
The whole units of the amount.
For example if currencyCode is "USD", then 1 unit is one US dollar.
Number of nano (10^-9) units of the amount.
The value must be between -999,999,999 and +999,999,999 inclusive.
If units is positive, nanos must be positive or zero.
If units is zero, nanos can be positive, zero, or negative.
If units is negative, nanos must be negative or zero.
For example $-1.75 is represented as units=-1 and nanos=-750,000,000.
The extra this device’s owner charges for selling its time in advance rather
than auctioning it, as a whole percent on top of the floor. A guaranteed
bid must beat floorPricePerPlayout x (100 + premium) / 100, per device and
per playout. 15 is a 15% uplift; 0 leaves the minimum at the floor. Not
bounded above.
Computed in fixed point over the floor’s nanos, rounded up, so a device is never sold below its own minimum. Guaranteed only — open-auction and SSP bids pay the floor.
Supported Ad types maps ad type names (e.g. “display”) to their accepted formats.
SupportedAdType holds the list of accepted formats for one ad type slot.
object
Ad-format ids this device can render, from the platform’s format catalogue. The supported ids are listed under Supported formats.
An id outside the catalogue is rejected as INVALID_ARGUMENT: the write fails
rather than storing a format that would match no creative.
Device unique external identifier, derived by the platform as
“{identifier.key}_{identifier.playerId}”.
Read-only: it cannot be assigned directly, and a value sent on a write is
ignored. Set identifier instead.
The device’s identity, and what externalId is derived from. key and
playerId are both required; key namespaces the player id. Required on the
first upsert; on a device that already exists it is ignored, so the
identity cannot be changed after creation.
object
Namespace for the player id.
Number of physical screens at this position.
Network operator / CMS partner that manages this device, e.g. “Viewento”.
Playout impression multipliers, per weekday and optional time range.
Leaving this empty defaults every playout to a factor of 1 — one playout counts as one impression — because a device with no curve is unconfigured, not measured at zero. Once any rule is present the list is read as a complete specification, and windows it does not cover resolve to a factor of 0.
Whether the store is open is a separate question, carried by Location.weeklyHours; do not encode closure here.
ImpressionFactor sets the playout impression multiplier for a recurring weekly window. An unset start/end means it applies to the whole day.
object
Represents a day of the week.
- DAY_OF_WEEK_UNSPECIFIED: The day of the week is unspecified.
- MONDAY: Monday
- TUESDAY: Tuesday
- WEDNESDAY: Wednesday
- THURSDAY: Thursday
- FRIDAY: Friday
- SATURDAY: Saturday
- SUNDAY: Sunday
Represents a time of day. The date and time zone are either not significant
or are specified elsewhere. An API may choose to allow leap seconds. Related
types are [google.type.Date][google.type.Date] and
google.protobuf.Timestamp.
object
Hours of a day in 24 hour format. Must be greater than or equal to 0 and typically must be less than or equal to 23. An API may choose to allow the value “24:00:00” for scenarios like business closing time.
Minutes of an hour. Must be greater than or equal to 0 and less than or equal to 59.
Seconds of a minute. Must be greater than or equal to 0 and typically must be less than or equal to 59. An API may allow the value 60 if it allows leap-seconds.
Fractions of seconds, in nanoseconds. Must be greater than or equal to 0 and less than or equal to 999,999,999.
Represents a time of day. The date and time zone are either not significant
or are specified elsewhere. An API may choose to allow leap seconds. Related
types are [google.type.Date][google.type.Date] and
google.protobuf.Timestamp.
object
Hours of a day in 24 hour format. Must be greater than or equal to 0 and typically must be less than or equal to 23. An API may choose to allow the value “24:00:00” for scenarios like business closing time.
Minutes of an hour. Must be greater than or equal to 0 and less than or equal to 59.
Seconds of a minute. Must be greater than or equal to 0 and typically must be less than or equal to 59. An API may allow the value 60 if it allows leap-seconds.
Fractions of seconds, in nanoseconds. Must be greater than or equal to 0 and less than or equal to 999,999,999.
Per-playout impression multiplier for this window. Fractional: DOOH hourly multipliers are derived as (hourly contacts / playouts) and are almost always non-integer, e.g. 3.33 (IDOOH/PuPS). Carry the exact value here and round only at aggregate/report time — never per playout.
Advertising-industry taxonomy categories that must not be served on this device.
Physical placement of the device within the venue (venue classification, zone, and product aisles). Owned directly by the device.
object
DOOH venue classification (parent + child tiers from OpenOOH v1.2.1).
The device’s zone within a grocery venue. Set this only when venue is a
grocery venue; on any other venue it is ignored.
Send at most one zone member. A request carrying both is rejected as
INVALID_ARGUMENT, even when the other is _UNSPECIFIED — omit the member
that does not apply rather than sending it unset.
The device’s zone within a mall venue. Set this only when venue is a mall
venue; on any other venue it is ignored.
Send at most one zone member. A request carrying both is rejected as
INVALID_ARGUMENT, even when the other is _UNSPECIFIED — omit the member
that does not apply rather than sending it unset.
Product aisles the device serves (e.g. PRODUCE, DAIRY). Grocery venues only.
The physical display panel. Required: a device whose panel size we do not hold cannot be described completely to an exchange that requires one.
object
Active display area in millimetres. Both are required together — one
without the other describes nothing. The diagonal SSPs ask for is derived
from these (hypot(width, height) / 25.4, rounded) and never stored, so
the two can never disagree.
Example
{ "device": { "location": { "externalId": "10000001" }, "type": "DEVICE_TYPE_UNSPECIFIED", "status": "STATUS_UNSPECIFIED", "deployment": { "allocationTargets": [ { "nonStatic": { "balancePolicy": "AD_SERVER_BALANCE_POLICY_UNSPECIFIED" } } ], "guaranteed": "GUARANTEED_UNSPECIFIED" }, "supportedAdTypes": [ { "adType": "AD_TYPE_UNSPECIFIED" } ], "sensors": [ "SENSOR_UNSPECIFIED" ], "playoutImpressionFactors": [ { "day": "DAY_OF_WEEK_UNSPECIFIED" } ], "excludedAdProducts": [ "AD_PRODUCT_UNSPECIFIED" ], "placement": { "aisles": [ "AISLE_DAIRY" ], "retailGroceryZone": "VENUE_RETAIL_GROCERY_AISLES", "venue": "VENUE_RETAIL_GROCERY" } }}