Promotion List API — Frontend Usage

Source service: src/app/modules/promotions/services/promotion.service.ts Response model: src/app/modules/promotions/models/promotion.type.ts


1. Endpoints

# Method Endpoint Service method
1 GET /app/promotion getPromotions()
2 GET /app/promotion/tags/{tag} getPromotionListByTag()
3 POST /app/promotion/by-ids getPromotionsByIds()

2. Request Parameters

2.1 GET /app/promotiongetPromotions()

Sent as query string. Any param whose value is falsy ('', 0, null, undefined) is stripped before the request is dispatched.

Param Default Type Notes
searchText '' string Free-text search
promotionType '' string Comes from arg promotionTypeId
PartnerID '' string Capital-cased on the wire
latitude '' number | string
longitude '' number | string
categories '' string Comma-separated category IDs
pageSize 24 number 0 would be stripped by the falsy check
paginationToken '' string Cursor for next page
sortExpression '' string
promotionMetaTagsId '' string
regionIDs '' string Comma-separated region IDs

2.2 GET /app/promotion/tags/{tag}getPromotionListByTag()

2.3 POST /app/promotion/by-idsgetPromotionsByIds()

JSON body:

Field Source arg Notes
ids combinedIds Comma-separated promotion IDs
sortType sortBy Sort key

3. Response Model

interface PromotionsResponse {
    entity: Promotion[];
    paginationToken: string;
    message: string;
    status: boolean;
}

interface Promotion {
    id: string;
    activityName: string;
    landmarkName: string;
    latitude: number;
    longitude: number;
    category: string;
    rating: string;
    distance: string;
    priceRange: string;
    fromPrice: number;
    toPrice: number;
    discount: number;
    imageURL: string;
    description: string;
    externalUrl: string;
    promotionCode: string;
    isInWishList?: boolean;
    promotionType: string;
    promotionTypeName: string;
    promotionName: string;
    promotionCouponType: string;
    termsAndConditions: string;
    shortDescription: string;
    networkName: string;
    promotionCategories: { id: string; name: string }[];
    ageRestricted: boolean;
    tags: { id: string; name: string }[];
    tagIDs: string;
    isPromotionCodeRequired: boolean;
    slug: string;
    regions: { id: string; name: string; slug: string }[];
    excerpt: string;
}

4. Fields Actively Consumed in the Frontend (25)

Field Where it is used
id Track-by, wishlist ops, navigation (everywhere)
slug Detail-page navigation
activityName Grid label, detail title, map info window
shortDescription Grid heading, search result heading, detail offer text
description Detail "Description" tab; one-line description pipe
termsAndConditions Detail "Offer Terms" tab
excerpt Discount / promo box text on the grid card
imageURL Grid card, detail image, search thumbnail, map info window
landmarkName Image alt text, map info window
latitude Map marker positioning
longitude Map marker positioning
regions Region name display on grid card
fromPrice Price-range display on grid
toPrice Price-range display on grid
category promotion-menu-name pipe lookup
promotionCategories promotion-menu-name pipe lookup
tags promotion-menu-name pipe lookup
promotionType promotion-menu-name pipe lookup
promotionTypeName Routing decision (Coupon vs Competition vs External), fallback label
promotionCouponType Coupon modal type (unique vs shared)
isPromotionCodeRequired "Redeem" vs "Go to offer" button choice
networkName External-redirect handling
ageRestricted Age-gate before navigation
isInWishList Wishlist button state
promotionCode Defined; not actively read in frontend code paths reviewed

Primary consumer files


5. Fields Defined in the Model but NOT Consumed (8)

These can be candidates for removal from the API response if the payload is being trimmed: