Promotion Operations
This document provides comprehensive documentation for all GraphQL operations available in the Main App Promotion API.
Queries​
promotion​
Get a single promotion by its slug identifier.
query GetPromotion($slug: String!, $ip: String, $userAgent: String) {
promotion(slug: $slug, ip: $ip, userAgent: $userAgent) {
id
name
description
slug
category
type
status
imageUrl
altText
backgroundColor
primaryButton {
text
action {
modal
externalUrl
internalUrl
}
}
secondaryButton {
action {
modal
externalUrl
internalUrl
}
}
seo {
title
description
socialImage
}
slider {
description
imageUrl
btnText
link
actionType
initialClickCount
}
popup {
description
imageUrl
btnText
link
actionType
layout
initialClickCount
}
videoSlider {
description
videoUrl
btnText
link
actionType
initialClickCount
}
isClaimed
isClicked
usersClaimed {
count
sampleUsers {
id
avatarUrl
}
}
remainedSecondsToOptIn
}
}
Arguments:
slug
(String!, required): The unique slug identifier for the promotionip
(String, optional): Client IP address for geo-targetinguserAgent
(String, optional): Client user agent for device targeting
Returns: Promotion
or null
if not found
Access: Public (optional authentication)
promotions​
Get a paginated list of promotions with filtering and sorting options.
query GetPromotions(
$category: PromotionCategory
$type: PromotionType
$limit: Int
$offset: Int
$order: SortOrder
$orderBy: PromotionOrderBy
$ip: String
$userAgent: String
) {
promotions(
category: $category
type: $type
limit: $limit
offset: $offset
order: $order
orderBy: $orderBy
ip: $ip
userAgent: $userAgent
) {
count
data {
id
name
description
slug
category
type
imageUrl
primaryButton {
text
action {
modal
}
}
isClaimed
isClicked
}
limit
offset
}
}
Arguments:
category
(PromotionCategory, optional): Filter by promotion category (CASINO, SPORTS, GENERAL)type
(PromotionType, optional): Filter by promotion type (SMALL, BIG)limit
(Int, optional): Maximum number of results (default: 10)offset
(Int, optional): Number of results to skip (default: 0)order
(SortOrder, optional): Sort order (ASC, DESC)orderBy
(PromotionOrderBy, optional): Sort field (CREATED_AT, UPDATED_AT, NAME)ip
(String, optional): Client IP for geo-targetinguserAgent
(String, optional): Client user agent for device targeting
Returns: PromotionPaginationResponse
Access: Public (optional authentication)
sliders​
Get a paginated list of slider content with category filtering.
query GetSliders(
$category: PromotionCategory
$sliderCategory: SliderCategory
$limit: Int
$offset: Int
$order: SortOrder
$ip: String
$userAgent: String
) {
sliders(
category: $category
sliderCategory: $sliderCategory
limit: $limit
offset: $offset
order: $order
ip: $ip
userAgent: $userAgent
) {
count
data {
id
description
slug
category
type
slider {
description
imageUrl
btnText
link
actionType
initialClickCount
}
primaryButton {
text
action {
modal
}
}
isClaimed
isClicked
}
limit
offset
}
}
Arguments:
category
(PromotionCategory, optional): Filter by promotion categorysliderCategory
(SliderCategory, optional): Filter by slider category (HOME_PAGE, CASINO_LOBBY, etc.)limit
(Int, optional): Maximum number of resultsoffset
(Int, optional): Number of results to skiporder
(SortOrder, optional): Sort orderip
(String, optional): Client IP for geo-targetinguserAgent
(String, optional): Client user agent for device targeting
Returns: PromotionPaginationResponse
Access: Public (optional authentication)
popups​
Get a paginated list of popup content with category filtering.
query GetPopups(
$category: PromotionCategory
$popupCategory: PopupCategory
$limit: Int
$offset: Int
$order: SortOrder
$ip: String
$userAgent: String
) {
popups(
category: $category
popupCategory: $popupCategory
limit: $limit
offset: $offset
order: $order
ip: $ip
userAgent: $userAgent
) {
count
data {
id
description
slug
category
type
popup {
description
imageUrl
btnText
link
actionType
layout
initialClickCount
}
primaryButton {
text
action {
modal
}
}
isClaimed
isClicked
}
limit
offset
}
}
Arguments:
category
(PromotionCategory, optional): Filter by promotion categorypopupCategory
(PopupCategory, optional): Filter by popup category (POPUP, NOTIFICATION, etc.)limit
(Int, optional): Maximum number of resultsoffset
(Int, optional): Number of results to skiporder
(SortOrder, optional): Sort orderip
(String, optional): Client IP for geo-targetinguserAgent
(String, optional): Client user agent for device targeting
Returns: PromotionPaginationResponse
Access: Public (optional authentication)
videoSliders​
Get a paginated list of video slider content with category filtering.
query GetVideoSliders(
$category: PromotionCategory
$videoSliderCategory: VideoSliderCategory
$limit: Int
$offset: Int
$order: SortOrder
$ip: String
$userAgent: String
) {
videoSliders(
category: $category
videoSliderCategory: $videoSliderCategory
limit: $limit
offset: $offset
order: $order
ip: $ip
userAgent: $userAgent
) {
count
data {
id
description
slug
category
type
videoSlider {
description
videoUrl
btnText
link
actionType
initialClickCount
}
primaryButton {
text
action {
modal
}
}
isClaimed
isClicked
}
limit
offset
}
}
Arguments:
category
(PromotionCategory, optional): Filter by promotion categoryvideoSliderCategory
(VideoSliderCategory, optional): Filter by video slider category (CASINO_EXPLORE, SPORTS_HIGHLIGHT, etc.)limit
(Int, optional): Maximum number of resultsoffset
(Int, optional): Number of results to skiporder
(SortOrder, optional): Sort orderip
(String, optional): Client IP for geo-targetinguserAgent
(String, optional): Client user agent for device targeting
Returns: PromotionPaginationResponse
Access: Public (optional authentication)
Mutations​
claimBonus​
Claim a bonus associated with a promotion.
mutation ClaimBonus($bonusId: String!) {
claimBonus(bonusId: $bonusId)
}
Arguments:
bonusId
(String!, required): The ID of the bonus to claim
Returns: Boolean
- Success status
Access: Authenticated users only
Requirements:
- User must be authenticated
- User must be migrated to new system
- Bonus must be available and valid
increasePromotionClicks (Deprecated)​
Track promotion clicks for analytics.
mutation IncreasePromotionClicks($id: String!) {
increasePromotionClicks(id: $id)
}
Arguments:
id
(String!, required): The promotion ID
Returns: Boolean
- Success status
Access: Authenticated users only
Status: Deprecated - Use BigQuery events instead
Error Handling​
Common Errors​
PROMOTION_NOT_FOUND
{
"message": "Promotion not found",
"code": "PROMOTION_NOT_FOUND"
}
ACCESS_DENIED
{
"message": "Access denied due to policy restrictions",
"code": "ACCESS_DENIED"
}
AUTHENTICATION_REQUIRED
{
"message": "Authentication required for this operation",
"code": "AUTHENTICATION_REQUIRED"
}
BONUS_CLAIM_FAILED
{
"message": "Bonus claim failed: already claimed",
"code": "BONUS_CLAIM_FAILED"
}
Usage Examples​
Basic Promotion Listing​
query {
promotions(limit: 10, category: CASINO) {
count
data {
id
name
description
imageUrl
primaryButton {
text
}
}
}
}
Slider Content for Homepage​
query {
sliders(sliderCategory: HOME_PAGE, limit: 5) {
data {
id
slider {
imageUrl
btnText
actionType
}
}
}
}
Popup Content with Layout​
query {
popups(popupCategory: POPUP, limit: 3) {
data {
id
popup {
layout
imageUrl
actionType
}
}
}
}
Video Content for Casino​
query {
videoSliders(videoSliderCategory: CASINO_EXPLORE, limit: 4) {
data {
id
videoSlider {
videoUrl
btnText
actionType
}
}
}
}