ConsumerApi

<back to all web services

FindAdMessageRequest

Consumer
Requires Authentication
Required role:Consumer
import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum

# module ConsumerApi


class Parking(str, Enum):
    STREET_PARKING = 'StreetParking'
    PARKING_GARAGE_NEARBY = 'ParkingGarageNearby'


class PaymentOption(str, Enum):
    VISA = 'Visa'
    MASTER_CARD = 'MasterCard'
    AMERICAN_EXPRESS = 'AmericanExpress'
    DINERS = 'Diners'
    VIPPS = 'Vipps'


class PriceMainDish(str, Enum):
    VALUE = 'Value'
    MEDIUM = 'Medium'
    HIGH = 'High'
    FINE_DINING = 'FineDining'


class DayOfWeek(str, Enum):
    SUNDAY = 'Sunday'
    MONDAY = 'Monday'
    TUESDAY = 'Tuesday'
    WEDNESDAY = 'Wednesday'
    THURSDAY = 'Thursday'
    FRIDAY = 'Friday'
    SATURDAY = 'Saturday'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class OpenAtTimeDto:
    week_day: Optional[DayOfWeek] = None
    hour: int = 0
    minute: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ImageUrls:
    preview: Optional[str] = None
    small: Optional[str] = None
    medium: Optional[str] = None
    large: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class OpeningHour:
    open_at_hour: int = 0
    open_at_minute: int = 0
    close_at_hour: int = 0
    close_at_minute: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WeeklyOpeningHours:
    monday: Optional[OpeningHour] = None
    tuesday: Optional[OpeningHour] = None
    wednesday: Optional[OpeningHour] = None
    thursday: Optional[OpeningHour] = None
    friday: Optional[OpeningHour] = None
    saturday: Optional[OpeningHour] = None
    sunday: Optional[OpeningHour] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class OpeningHours:
    weekly: Optional[WeeklyOpeningHours] = None


class PlaceType(str, Enum):
    MALL = 'Mall'
    REGULAR = 'Regular'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PriceMainDishApiDto:
    title: Optional[str] = None
    slug: Optional[PriceMainDish] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class TimeZoneDto:
    base_utc_offset: datetime.timedelta = datetime.timedelta()
    daylight_name: Optional[str] = None
    display_name: Optional[str] = None
    id: Optional[str] = None
    standard_name: Optional[str] = None
    supports_daylight_saving_time: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PlaceContact:
    phone: Optional[str] = None
    email: Optional[str] = None
    website: Optional[str] = None
    web_shop: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PlaceAddress:
    street: Optional[str] = None
    postal_code: Optional[str] = None
    region: Optional[str] = None
    country_code: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CategoryTreeApiDto:
    name: Optional[str] = None
    slug: Optional[str] = None
    absolute_slug: Optional[str] = None
    image_url: Optional[str] = None
    all_image_url: Optional[str] = None
    icon_image_url: Optional[str] = None
    position: int = 0
    children: List[CategoryTreeApiDto] = field(default_factory=list)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WearPriceProfileEsDto:
    slug: Optional[str] = None
    label: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BrandApiDto:
    name: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PlaceCustomBrandApiDto:
    name: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PlaceSelectedBrandApiDto:
    brand: Optional[BrandApiDto] = None
    category_absolute_slugs: List[str] = field(default_factory=list)
    place_custom_brand: Optional[PlaceCustomBrandApiDto] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PlaceBasicApiDto:
    id: int = 0
    guid: Optional[str] = None
    overview: Optional[str] = None
    name: Optional[str] = None
    longitude: float = 0.0
    latitude: float = 0.0
    claimed: bool = False
    organization_number: Optional[str] = None
    country_code: Optional[str] = None
    opening_hours: Optional[OpeningHours] = None
    wheelchair_accessible: Optional[bool] = None
    wifi: Optional[bool] = None
    outdoor_seating: Optional[bool] = None
    save_food_and_money: Optional[bool] = None
    place_type: Optional[PlaceType] = None
    price_main_dish: Optional[PriceMainDishApiDto] = None
    time_zone_dto: Optional[TimeZoneDto] = None
    business_id: Optional[int] = None
    contact: Optional[PlaceContact] = None
    address: Optional[PlaceAddress] = None
    categories: List[CategoryTreeApiDto] = field(default_factory=list)
    logo_url: Optional[ImageUrls] = None
    image_url: Optional[ImageUrls] = None
    wear_price_profiles: List[WearPriceProfileEsDto] = field(default_factory=list)
    brands: List[PlaceSelectedBrandApiDto] = field(default_factory=list)
    floor: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsBase:
    description: Optional[str] = None
    more_information: List[str] = field(default_factory=list)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsPercentageDiscountOnAllMerchandise(AdMessageDetailsBase):
    value: float = 0.0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsPercentageDiscountRangeOnAllMerchandise(AdMessageDetailsBase):
    start: float = 0.0
    stop: float = 0.0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsPercentageDiscountOnSelectedMerchandise(AdMessageDetailsBase):
    value: float = 0.0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsAbsoluteDiscountOnSelectedMerchandise(AdMessageDetailsBase):
    value: float = 0.0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsAbsoluteDiscountRangeOnAllMerchandise(AdMessageDetailsBase):
    start: float = 0.0
    stop: float = 0.0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsTotalAmountOverXgivesYdiscount(AdMessageDetailsBase):
    if_total_amount_more_than_x: float = 0.0
    then_you_get_discount_percentage_y: float = 0.0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsXforYdiscount(AdMessageDetailsBase):
    if_you_buy_x: int = 0
    then_you_get_y: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsNewArrivals(AdMessageDetailsBase):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsFreetext(AdMessageDetailsBase):
    title: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsTodaysBreakFastOffer(AdMessageDetailsBase):
    value: float = 0.0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsTodaysLunchOffer(AdMessageDetailsBase):
    value: float = 0.0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsTodaysDinnerOffer(AdMessageDetailsBase):
    value: float = 0.0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsSaveFoodAndMoney(AdMessageDetailsBase):
    value: float = 0.0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsPercentageOffYourFoodBill(AdMessageDetailsBase):
    percentage: float = 0.0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsHappyHour(AdMessageDetailsBase):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsSomeFreeTablesLeftToday(AdMessageDetailsBase):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsTwoDishesForThePriceOfOne(AdMessageDetailsBase):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDetailsUnion:
    percentage_on_all_merchandise: Optional[AdMessageDetailsPercentageDiscountOnAllMerchandise] = None
    percentage_range_on_all_merchandise: Optional[AdMessageDetailsPercentageDiscountRangeOnAllMerchandise] = None
    percentage_on_selected_merchandise: Optional[AdMessageDetailsPercentageDiscountOnSelectedMerchandise] = None
    absolute_on_selected_merchandise: Optional[AdMessageDetailsAbsoluteDiscountOnSelectedMerchandise] = None
    absolute_range_on_all_merchandise: Optional[AdMessageDetailsAbsoluteDiscountRangeOnAllMerchandise] = None
    total_amount_over_xgives_ydiscount: Optional[AdMessageDetailsTotalAmountOverXgivesYdiscount] = None
    xfor_y: Optional[AdMessageDetailsXforYdiscount] = None
    new_arrivals: Optional[AdMessageDetailsNewArrivals] = None
    freetext: Optional[AdMessageDetailsFreetext] = None
    todays_break_fast_offer: Optional[AdMessageDetailsTodaysBreakFastOffer] = None
    todays_lunch_offer: Optional[AdMessageDetailsTodaysLunchOffer] = None
    todays_dinner_offer: Optional[AdMessageDetailsTodaysDinnerOffer] = None
    save_food_and_money: Optional[AdMessageDetailsSaveFoodAndMoney] = None
    percentage_of_your_food_bill: Optional[AdMessageDetailsPercentageOffYourFoodBill] = None
    happy_hour: Optional[AdMessageDetailsHappyHour] = None
    some_free_tables_left_today: Optional[AdMessageDetailsSomeFreeTablesLeftToday] = None
    two_dishes_for_the_price_of_one: Optional[AdMessageDetailsTwoDishesForThePriceOfOne] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdMessageDto:
    id: int = 0
    guid: Optional[str] = None
    title: Optional[str] = None
    start_at: datetime.datetime = datetime.datetime(1, 1, 1)
    stop_at: datetime.datetime = datetime.datetime(1, 1, 1)
    publish_at: datetime.datetime = datetime.datetime(1, 1, 1)
    image_urls: List[ImageUrls] = field(default_factory=list)
    place: Optional[PlaceBasicApiDto] = None
    details_union: Optional[AdMessageDetailsUnion] = None
    starred_count: int = 0


class FeatureType(str, Enum):
    BAR_SPECIALITY = 'BarSpeciality'
    BAR_TYPE = 'BarType'
    CUISINE = 'Cuisine'
    SAVE_FOOD_AND_MONEY = 'SaveFoodAndMoney'
    MEAL_TYPE = 'MealType'
    MENU = 'Menu'
    OUTDOOR_SEATING = 'OutdoorSeating'
    PARKING = 'Parking'
    PAYMENT_OPTIONS = 'PaymentOptions'
    PRICE_MAIN_DISH = 'PriceMainDish'
    SUB_CATEGORIES = 'SubCategories'
    SUB_CATEGORIES_AND_BRANDS = 'SubCategoriesAndBrands'
    EATING_SUITABILITIES = 'EatingSuitabilities'
    TAKE_AWAY = 'TakeAway'
    WEAR_PRICE_PROFILE = 'WearPriceProfile'
    WHEEL_CHAIR_ACCESSIBLE = 'WheelChairAccessible'
    WIFI = 'Wifi'
    WEB_SHOP = 'WebShop'
    FILTERING = 'Filtering'


Python FindAdMessageRequest DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /jsv/reply/FindAdMessageRequest HTTP/1.1 
Host: unstable-consumer-api.brovs.com 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	offset: 0,
	size: 0,
	resultAt: 0001-01-01,
	filter: 
	{
		term: String,
		placeGuid: 00000000-0000-0000-0000-000000000000,
		adMessageGuid: 00000000-0000-0000-0000-000000000000,
		categoryAbsoluteSlugs: 
		[
			String
		],
		barSpecialitySlugs: 
		[
			String
		],
		barTypeSlugs: 
		[
			String
		],
		brandNames: 
		[
			String
		],
		cuisineSlugs: 
		[
			String
		],
		mealTypeSlugs: 
		[
			String
		],
		parking: 
		[
			StreetParking
		],
		paymentOptions: 
		[
			Visa
		],
		priceMainDishes: 
		[
			Value
		],
		eatingSuitabilitySlugs: 
		[
			String
		],
		takeAwaySlugs: 
		[
			String
		],
		wearPriceProfileSlugs: 
		[
			String
		],
		wheelChairAccessible: False,
		wifi: False,
		outdoorSeating: False,
		saveFoodAndMoney: False,
		openAt: 
		{
			weekDay: Sunday,
			hour: 0,
			minute: 0
		}
	},
	location: 
	{
		longitude: 0,
		latitude: 0,
		searchRadiusInKm: 0
	},
	cacheVersion: 0
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	adMessages: 
	[
		{
			id: 0,
			title: String,
			startAt: 0001-01-01T00:00:00.0000000+00:00,
			stopAt: 0001-01-01T00:00:00.0000000+00:00,
			publishAt: 0001-01-01T00:00:00.0000000+00:00,
			imageUrls: 
			[
				{
					preview: String,
					small: String,
					medium: String,
					large: String
				}
			],
			place: 
			{
				id: 0,
				overview: String,
				name: String,
				longitude: 0,
				latitude: 0,
				claimed: False,
				organizationNumber: String,
				countryCode: String,
				openingHours: 
				{
					weekly: 
					{
						monday: 
						{
							openAtHour: 0,
							openAtMinute: 0,
							closeAtHour: 0,
							closeAtMinute: 0
						},
						tuesday: 
						{
							openAtHour: 0,
							openAtMinute: 0,
							closeAtHour: 0,
							closeAtMinute: 0
						},
						wednesday: 
						{
							openAtHour: 0,
							openAtMinute: 0,
							closeAtHour: 0,
							closeAtMinute: 0
						},
						thursday: 
						{
							openAtHour: 0,
							openAtMinute: 0,
							closeAtHour: 0,
							closeAtMinute: 0
						},
						friday: 
						{
							openAtHour: 0,
							openAtMinute: 0,
							closeAtHour: 0,
							closeAtMinute: 0
						},
						saturday: 
						{
							openAtHour: 0,
							openAtMinute: 0,
							closeAtHour: 0,
							closeAtMinute: 0
						},
						sunday: 
						{
							openAtHour: 0,
							openAtMinute: 0,
							closeAtHour: 0,
							closeAtMinute: 0
						}
					}
				},
				wheelchairAccessible: False,
				wifi: False,
				outdoorSeating: False,
				saveFoodAndMoney: False,
				placeType: Mall,
				priceMainDish: 
				{
					title: String,
					slug: Value
				},
				timeZoneDto: 
				{
					baseUtcOffset: PT0S,
					daylightName: String,
					displayName: String,
					id: String,
					standardName: String,
					supportsDaylightSavingTime: False
				},
				businessId: 0,
				contact: 
				{
					phone: String,
					email: String,
					website: String,
					webShop: String
				},
				address: 
				{
					street: String,
					postalCode: String,
					region: String,
					countryCode: String
				},
				categories: 
				[
					{
						name: String,
						slug: String,
						absoluteSlug: String,
						imageUrl: String,
						allImageUrl: String,
						iconImageUrl: String,
						position: 0,
						children: 
						[
							{
								name: String,
								slug: String,
								absoluteSlug: String,
								imageUrl: String,
								allImageUrl: String,
								iconImageUrl: String,
								position: 0,
								children: 
								[
									{
										name: String,
										slug: String,
										absoluteSlug: String,
										imageUrl: String,
										allImageUrl: String,
										iconImageUrl: String,
										position: 0
									}
								]
							}
						]
					}
				],
				logoUrl: 
				{
					preview: String,
					small: String,
					medium: String,
					large: String
				},
				imageUrl: 
				{
					preview: String,
					small: String,
					medium: String,
					large: String
				},
				wearPriceProfiles: 
				[
					{
						slug: String,
						label: String
					}
				],
				brands: 
				[
					{
						brand: 
						{
							name: String
						},
						categoryAbsoluteSlugs: 
						[
							String
						],
						placeCustomBrand: 
						{
							name: String
						}
					}
				],
				floor: String
			},
			detailsUnion: 
			{
				percentageOnAllMerchandise: 
				{
					value: 0,
					description: String,
					moreInformation: 
					[
						String
					]
				},
				percentageRangeOnAllMerchandise: 
				{
					start: 0,
					stop: 0,
					description: String,
					moreInformation: 
					[
						String
					]
				},
				percentageOnSelectedMerchandise: 
				{
					value: 0,
					description: String,
					moreInformation: 
					[
						String
					]
				},
				absoluteOnSelectedMerchandise: 
				{
					value: 0,
					description: String,
					moreInformation: 
					[
						String
					]
				},
				absoluteRangeOnAllMerchandise: 
				{
					start: 0,
					stop: 0,
					description: String,
					moreInformation: 
					[
						String
					]
				},
				totalAmountOverXgivesYdiscount: 
				{
					ifTotalAmountMoreThanX: 0,
					thenYouGetDiscountPercentageY: 0,
					description: String,
					moreInformation: 
					[
						String
					]
				},
				xforY: 
				{
					ifYouBuyX: 0,
					thenYouGetY: 0,
					description: String,
					moreInformation: 
					[
						String
					]
				},
				newArrivals: 
				{
					description: String,
					moreInformation: 
					[
						String
					]
				},
				freetext: 
				{
					title: String,
					description: String,
					moreInformation: 
					[
						String
					]
				},
				todaysBreakFastOffer: 
				{
					value: 0,
					description: String,
					moreInformation: 
					[
						String
					]
				},
				todaysLunchOffer: 
				{
					value: 0,
					description: String,
					moreInformation: 
					[
						String
					]
				},
				todaysDinnerOffer: 
				{
					value: 0,
					description: String,
					moreInformation: 
					[
						String
					]
				},
				saveFoodAndMoney: 
				{
					value: 0,
					description: String,
					moreInformation: 
					[
						String
					]
				},
				percentageOfYourFoodBill: 
				{
					percentage: 0,
					description: String,
					moreInformation: 
					[
						String
					]
				},
				happyHour: 
				{
					description: String,
					moreInformation: 
					[
						String
					]
				},
				someFreeTablesLeftToday: 
				{
					description: String,
					moreInformation: 
					[
						String
					]
				},
				twoDishesForThePriceOfOne: 
				{
					description: String,
					moreInformation: 
					[
						String
					]
				}
			},
			starredCount: 0
		}
	],
	adMessageCount: 0,
	adMessageSaveFoodAndMoneyCount: 0,
	resultAt: 0001-01-01,
	categoryFacetTrees: 
	[
		{
			name: String,
			slug: String,
			absoluteSlug: String,
			featureTypes: 
			[
				BarSpeciality
			],
			type: Parent,
			count: 0,
			imageUrl: String,
			allImageUrl: String,
			iconImageUrl: String,
			position: 0,
			children: 
			[
				{
					name: String,
					slug: String,
					absoluteSlug: String,
					featureTypes: 
					[
						BarSpeciality
					],
					type: Parent,
					count: 0,
					imageUrl: String,
					allImageUrl: String,
					iconImageUrl: String,
					position: 0,
					children: 
					[
						{
							name: String,
							slug: String,
							absoluteSlug: String,
							featureTypes: 
							[
								BarSpeciality
							],
							type: Parent,
							count: 0,
							imageUrl: String,
							allImageUrl: String,
							iconImageUrl: String,
							position: 0
						}
					]
				}
			]
		}
	]
}