BusinessApi

<back to all web services

ShareAdLinkUsedRequest

Consumer
The following routes are available for this service:
POST/share/share-ad-link-usedA share AD link was usedValidates the JWT token with the identity of the sharing user and the shared AD Message and returns relevant information.
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 BusinessApi


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SharingUser:
    first_name: Optional[str] = None
    last_name: Optional[str] = None
    profile_photo_url: Optional[str] = None


@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'


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


@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 AdDetailsBase:
    description: Optional[str] = None
    more_information: List[str] = field(default_factory=list)


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


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


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


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


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


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdDetailsTotalAmountOverXgivesYdiscount(AdDetailsBase):
    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 AdDetailsXforYdiscount(AdDetailsBase):
    if_you_buy_x: int = 0
    then_you_get_y: int = 0


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


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


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


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


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


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


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


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


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


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


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdDetailsUnion:
    percentage_on_all_merchandise: Optional[AdDetailsPercentageDiscountOnAllMerchandise] = None
    percentage_range_on_all_merchandise: Optional[AdDetailsPercentageDiscountRangeOnAllMerchandise] = None
    percentage_on_selected_merchandise: Optional[AdDetailsPercentageDiscountOnSelectedMerchandise] = None
    absolute_on_selected_merchandise: Optional[AdDetailsAbsoluteDiscountOnSelectedMerchandise] = None
    absolute_range_on_all_merchandise: Optional[AdDetailsAbsoluteDiscountRangeOnAllMerchandise] = None
    total_amount_over_xgives_ydiscount: Optional[AdDetailsTotalAmountOverXgivesYdiscount] = None
    xfor_y: Optional[AdDetailsXforYdiscount] = None
    new_arrivals: Optional[AdDetailsNewArrivals] = None
    freetext: Optional[AdDetailsFreetext] = None
    todays_break_fast_offer: Optional[AdDetailsTodaysBreakFastOffer] = None
    todays_lunch_offer: Optional[AdDetailsTodaysLunchOffer] = None
    todays_dinner_offer: Optional[AdDetailsTodaysDinnerOffer] = None
    save_food_and_money: Optional[AdDetailsSaveFoodAndMoney] = None
    percentage_of_your_food_bill: Optional[AdDetailsPercentageOffYourFoodBill] = None
    happy_hour: Optional[AdDetailsHappyHour] = None
    some_free_tables_left_today: Optional[AdDetailsSomeFreeTablesLeftToday] = None
    two_dishes_for_the_price_of_one: Optional[AdDetailsTwoDishesForThePriceOfOne] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdDto:
    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[AdDetailsUnion] = None
    starred_count: int = 0


class SharingState(str, Enum):
    TEASER = 'Teaser'
    AWARDED = 'Awarded'
    SELF_SHARE = 'SelfShare'
    EXPIRED = 'Expired'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ShareAdLinkUsedResponse:
    user: Optional[SharingUser] = None
    ad: Optional[AdDto] = None
    place: Optional[PlaceBasicApiDto] = None
    state: Optional[SharingState] = None


class Locale(str, Enum):
    EN_US = 'EnUs'
    NB_NO = 'NbNo'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ShareAdLinkUsedRequest(IPost):
    share_ad_token: Optional[str] = None
    locale: Optional[Locale] = None


Python ShareAdLinkUsedRequest DTOs

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

HTTP + OTHER

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

POST /share/share-ad-link-used HTTP/1.1 
Host: qa-business-api.brovs.com 
Accept: text/jsonl
Content-Type: text/jsonl
Content-Length: length

{"shareAdToken":"String","locale":"EnUs"}
HTTP/1.1 200 OK
Content-Type: text/jsonl
Content-Length: length

{"user":{"firstName":"String","lastName":"String","profilePhotoUrl":"String"},"ad":{"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},"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"},"state":"Teaser"}