Create Promotion for UCC

Lets you create a promotion for UCC a specific loyalty program.

This API is used to create a loyalty promotion. A loyalty promotion rewards customers for achieving a target.

Prerequisites

  • Authentication: Basic/OAuth authentication
  • Default access group

Resource information

URIv1/programs/{programId}/createPromotion/{promotionType}
HTTP methodPOST
PaginationNA
Rate limitNA
Batch supportNA

API endpoint example

https://eu.api.capillarytech.com/api_gateway/loyalty/v1/programs/699/createPromotion/simple

Request path parameters

ParameterData
Type
Description
programIDIntegerUnique id of the loyalty program
promotionTypeStringType of promotion. Supported values SIMPLE, RANGE, KEYWORD

Sample request body

{
    "promotion": {
        "id": -1,
        "name": "test_promo_uniqueName110",
        "programId": 2932,
        "startDate": "2024-08-09T12:00:00+01:00",
        "endDate": "2024-08-25T12:00:00+01:00",
        "allocatePointsOn": "BILL",
        "identifier": "test_promo_uniqueIdentifier110",
        "eventName": "TARGETCOMPLETED",
        "pointsOfferType": "LOYALTY",
        "promotionType": "BILL",
        "promotionSourceType": "USER_CREATED",
        "limits": {
            "pointsPerCustomer": -1,
            "numberOfTimesPerCustomer": -1,
            "totalPointsInPromotion": -1
        },
        "promotionRestrictions": {
            "loyaltyEarningType": "ISSUE_AND_EARN",
            "isStackable": false,
            "isExclusive": false,
            "isConsideredForRanking": false,
            "targetRuleIds": [
                123
            ],
            "targetGroupIds": [
                1234567
            ],
            "restrictions": {
                "redemptionRestrictions": [
                    {
                        "name": "MAX_ALLOWED_TIMES_PER_CUSTOMER",
                        "value": 3,
                        "type": "PERIOD_BASED",
                        "periodType": "MOVING_WINDOW",
                        "periodUnit": "WEEKLY"
                    },
                    {
                        "name": "MAX_ALLOWED_TIMES_PER_PROMOTION",
                        "value": 3,
                        "type": "NON_PERIOD_BASED"
                    }
                ],
                "issualRestrictions": [
                    {
                        "name": "MAX_NUMBER_OF_ISSUALS_PER_CUSTOMER",
                        "value": 3,
                        "type": "NON_PERIOD_BASED"
                    }
                ],
                "earnRestrictions": [
                    {
                        "name": "MAX_NUMBER_OF_EARNS_PER_CUSTOMER",
                        "value": 3
                    }
                ],
                "expiryRestrictions": [
                    {
                        "name": "ISSUAL_PROMOTION_EXPIRY_BASED_ON",
                        "type": "PROMOTION",
                        "value": 10
                    }
                ]
            }
        },
        "rulesetInfos": [
            {
                "id": -1,
                "contextID": 2932,
                "orgID": 51174,
                "contextType": "program",
                "endpointName": "POINTSENGINE_ENDPOINT",
                "name": "rulesetName_uniqueue1",
                "type": "USER_CREATED",
                "startDate": 1089532593324,
                "endDate": 33593126193324,
                "active": true,
                "rules": [
                    {
                        "id": -1,
                        "exp": "true",
                        "expJSON": "{ \"arity\": \"literal\", \"value\": \"true\", \"type\": \"boolean:primitive\" }",
                        "isActive": true,
                        "caseToActions": {
                            "true": [
                                {
                                    "id": -1,
                                    "actionName": "AWARD_TARGET_POINTS_ACTION",
                                    "mandatoryPropertiesValues": {
                                        "ProRateOnSourceValue": "EVENT_DEFAULT_VALUE",
                                        "DelayStrategy": "AS_DEFINED_IN_ALLOCATION_STRATEGY",
                                        "SourceValueRoundingStrategy": "ACTUAL",
                                        "ExpiryStrategy": "81042",
                                        "AwardStrategy": "82690",
                                        "PointsRoundingStrategy": "ACTUAL",
                                        "TargetGroupId": "1234567",
                                        "TargetRuleName": "TargetRuleName"
                                    }
                                }
                            ]
                        },
                        "filterInfo": [],
                        "description": "",
                        "expDataType": "",
                        "ruleSetId": -1,
                        "updatedViaNewUI": false
                    }
                ],
                "filterInfo": [
                    {
                        "id": -1,
                        "contextType": "RULESET",
                        "name": "LoyaltyType",
                        "description": "LoyaltyType",
                        "isInclude": true,
                        "propertyToValues": {
                            "loyaltyType": [
                                "loyalty"
                            ]
                        }
                    },
                    {
                        "id": -1,
                        "contextType": "RULESET",
                        "name": "EventSource",
                        "description": "EventSource",
                        "isInclude": true,
                        "propertyToValues": {
                            "eventSource": [
                                "INSTORE"
                            ]
                        }
                    }
                ],
                "cappingInfo": [],
                "isRulesetForGlobalPromotion": "false",
                "programIds": []
            }
        ]
    }
}

Request Parameters

ParameterDatatypeDescription
promotionobjectRoot object containing all promotion details.
- id*intUnique ID of the promotion. Set this value to -1 while creating a new promotion.
- name*stringUnique name of the promotion.
The character limit for the name is 255 characters.
- programId*intUnique ID of the loyalty program to associate with the promotion.
- startDate*date-timeValidity of the promotion. Pass the ISO standard date (yyyy-mm-ddThh:mm:ss.s+z).
- endDate*date-timeEnd date of the promotion. Pass the ISO standard date (yyyy-mm-ddThh:mm:ss.s+z).
- allocatePointsOnstringQuantity on which points needs to be allocated BILL , LINEITEM
- identifier*stringUnique identifier for the promotion.
The character limit for the identifier is 255 characters.
- eventName*enumName of the event associated with the promotion, e.g., TARGETCOMPLETED.
- pointsOfferTypestringType of points being offered, e.g., LOYALTY.
- promotionTypestringType of promotion, e.g., BILL.
- promotionSourceTypestringSource from where the promotion is created: Supported values PROMOTION_API, CAMPAIGN, BADGES, USER_CREATED.

Pass the value as USER_CREATED for creating a UCC promotion.
- limitsobjectPromotion limits configuration.
-- pointsPerCustomerintMaximum points that can be issued per customer (set to -1 for no limit).
-- numberOfTimesPerCustomerintMaximum number of times points can be issued to a customer (set to -1 for no limit).
-- totalPointsInPromotionintTotal points that can be generated during the promotion (set to -1 for no limit).
- promotionRestrictionsobjectRestriction settings for the promotion.
-- loyaltyEarningTypestringType of earning, e.g., ISSUE_AND_EARN
-- isStackablebooleanIndicates if the promotion can be stacked with other promotions
-- isExclusivebooleanIndicates if the promotion is exclusive (set to false).
-- isConsideredForRankingbooleanIndicates if the promotion is considered for ranking (set to false).
-- targetRuleIds*arrayList of target rule IDs.
-- targetGroupIds*arrayList of target group IDs.
-- restrictionsobjectDefines various restrictions for redemption, issual, and earning.
--- redemptionRestrictionsarrayRestrictions for redemption.
---- namestringName of the restriction, e.g., MAX_ALLOWED_TIMES_PER_CUSTOMER.
---- valueintValue for the restriction, e.g., 3.
---- typestringType of restriction, e.g., PERIOD_BASED.
---- periodTypestringPeriod type. Supported values MOVING_WINDOW, FIXED_WINDOW
---- periodUnitstringPeriod unit, Supported values DAILY WEEKLY, MONTHLY
--- issualRestrictionsarrayRestrictions for issual.
---- namestringName of the issual restriction
---- valueintValue for the issual restriction
---- typestringType of restriction, e.g., NON_PERIOD_BASED.
--- earnRestrictionsarrayRestrictions for earning.
---- namestringName of the earn restriction, e.g., MAX_NUMBER_OF_EARNS_PER_CUSTOMER.
---- valueintValue for the earn restriction
--- expiryRestrictionsarrayExpiry restrictions.
---- namestringName of the expiry restriction
---- valueintValue for the expiry restriction
- rulesetInfos*objectInformation about the ruleset associated with the promotion.
-- idintUnique ID of the ruleset. Set to -1 for new promotion.
-- contextID*intUnique ID of the program.
-- orgID*intUnique ID of the organisation
-- contextType*stringType of context.
-- endpointName*stringName of the endpoint
-- name*stringUnique name for the ruleset
-- type*stringType of ruleset.
For creating a UCC promotion, set this value to USER_CREATED.
-- startDate*intStart date of the ruleset in Epoch time.
-- endDate*intEnd date of the ruleset in Epoch time.
-- active*booleanStatus of the ruleset (set to true).
-- rules*arrayList of rules applied to the promotion.
--- idintUnique ID of the rule (set to -1 for creating a new rule).
--- exp*booleanRule expression to determine if the rule is true or false.
--- expJSON*stringRule expression in JSON format.
--- isActive*booleanStatus of the rule.
--- caseToActions*objectDefines actions to take when the rule is satisfied.
---- actionName*stringName of the action.
---- mandatoryPropertiesValues*objectDefines the mandatory properties for the action (e.g., ProRateOnSourceValue, AwardStrategy, etc.).
-- filterInfoarrayInformation on the scope filters applied to the ruleset.
--- namestringName of the filter, e.g., LoyaltyType.
--- propertyToValuesobjectKey-value pairs for filter properties, e.g., loyaltyType: [ "loyalty" ].
-- cappingInfoarrayOptional capping information for the ruleset.
-- isRulesetForGlobalPromotionbooleanIndicates if the ruleset is for a global promotion.

Sample response

{
    "status": {
        "code": 200,
        "message": "success"
    },
    "validationErrors": null,
    "data": [
        {
            "id": 200654,
            "name": "test_promo_uniqueName10",
            "promotionStatus": "COMPLETED",
            "programId": 2822,
            "startDate": "2024-08-09T00:00:00.284Z",
            "endDate": "2024-08-10T23:59:59.285Z",
            "identifier": "test_promo_uniqueIdentifier10",
            "isActive": true,
            "eventName": "TARGETCOMPLETED",
            "allocatePointsOn": "BILL",
            "limits": {
                "pointsPerCustomer": -1,
                "numberOfTimesPerCustomer": -1,
                "totalPointsInPromotion": -1,
                "totalPointsPerEventLimit": -1
            },
            "pointsOfferType": "LOYALTY",
            "promotionRestrictions": {
                "restrictions": {
                    "redemptionRestrictions": [
                        {
                            "name": "MAX_ALLOWED_TIMES_PER_CUSTOMER",
                            "value": 3,
                            "type": "PERIOD_BASED",
                            "periodType": "MOVING_WINDOW",
                            "periodUnit": "WEEKLY"
                        },
                        {
                            "name": "MAX_ALLOWED_TIMES_PER_PROMOTION",
                            "value": 3,
                            "type": "NON_PERIOD_BASED",
                            "periodType": null,
                            "periodUnit": null
                        },
                        {
                            "name": "MAX_REDEMPTIONS_PER_EARN_PER_CUSTOMER",
                            "value": 100,
                            "type": "NON_PERIOD_BASED",
                            "periodType": null,
                            "periodUnit": null
                        }
                    ],
                    "issualRestrictions": [
                        {
                            "name": "MAX_NUMBER_OF_ISSUALS_PER_CUSTOMER",
                            "value": 3
                        }
                    ],
                    "earnRestrictions": [
                        {
                            "name": "MAX_NUMBER_OF_EARNS_PER_CUSTOMER",
                            "value": 3
                        }
                    ],
                    "expiryRestrictions": [
                        {
                            "name": "ISSUAL_PROMOTION_EXPIRY_BASED_ON",
                            "value": 10,
                            "type": "PROMOTION"
                        }
                    ]
                },
                "scope": null,
                "isStackable": false,
                "isConsideredForRanking": true,
                "loyaltyEarningType": "ISSUE_AND_EARN",
                "expiryReminder": null,
                "isExclusive": false,
                "isAlwaysApply": false,
                "targetGroupIds": [
                    1234567
                ],
                "targetRuleIds": [
                    123
                ]
            }
        }
    ]
}

Response parameters

ParameterData typeDescription
statusObjectContains the response status.
-codeIntegerStatus code of the response (e.g., 200 for success).
-messageStringStatus message (e.g., "success").
validationErrorsObjectContains validation errors, if any. Null indicates no errors.
dataArrayContains data related to the promotion.
- idIntegerUnique identifier for the promotion.
- nameStringName of the promotion.
-promotionStatusStringCurrent status of the promotion (e.g., “LIVE”, "COMPLETED").
- programIdIntegerID of the associated loyalty program.
- startDateStringStart date of the promotion in ISO 8601 format.
- endDateStringEnd date of the promotion in ISO 8601 format.
- identifierStringUnique identifier for the promotion.
-isActiveBooleanIndicates if the promotion is active.
- eventNameStringEvent that triggers the promotion. An event refers to a specific action for example a store visit or transaction.
- allocatePointsOnStringWhere points are allocated (e.g., "BILL").
- limitsObjectPromotion limits.
-- pointsPerCustomerIntegerMaximum points a customer can earn.
(-1 indicates no limit).
-- numberOfTimesPerCustomerIntegerNumber of times a customer can participate.
(-1 indicates no limit).
-- totalPointsInPromotionIntegerTotal points available in the promotion.
(-1 indicates no limit).
-- totalPointsPerEventLimitIntegerTotal points limit per event.
(-1 indicates no limit).
- pointsOfferTypeStringType of points offered (e.g., "LOYALTY"). A points offer refers to loyalty points issued to customers
promotionRestrictionsObjectContains the restrictions applicable to the promotion. Restrictions can be configured while setting up the loyalty promotion.
- restrictionsObjectContains various restriction types.
-- redemptionRestrictionsArrayRedemption-related restrictions. These are advanced settings for redemption.
--- nameStringName of the redemption restriction
--- valueIntegerMaximum allowed times per customer.
--- typeStringRestriction type (e.g., "PERIOD_BASED").
--- periodTypeStringPeriod type for restriction (e.g., "MOVING_WINDOW", FIXED_WINDOW).
--- periodUnitArrayPeriod unit for restriction (e.g., "WEEKLY", “MONTHLY”).
-- issualRestrictionsArrayIssual related restrictions. An “issual” refers to the issuance of a specific promotion to customers based on their behavioral events or transactions.
--- nameArrayName of the issuance restriction
--- valueIntegerMaximum issuances per customer.
-- earnRestrictionsArrayEarnrelated restrictions. “Earn" refers to the process where a customer completes the necessary activities to qualify for a promotion.
--- nameStringName of the earning restriction
--- valueIntegerMaximum earnings per customer.
-- expiryRestrictionsArrayExpiry-related restrictions.
--- nameStringName of the expiry restriction
--- valueIntegerExpiry value.
--- typeStringExpiry type (e.g., "PROMOTION").
- scopeObjectScope of the promotion (if applicable).
- isStackableBooleanIndicates if the promotion can be combined with other promotions.
- isConsideredForRankingBooleanIndicates if the promotion is considered for ranking.
- loyaltyEarningTypeStringType of loyalty earning.
- expiryReminderObjectExpiry reminder, if any. Null indicates no reminder.
- isExclusiveBooleanIndicates if the promotion is exclusive.
- isAlwaysApplyBooleanIndicates if the promotion always applies.
- targetGroupIdsIntegerList of target group IDs.
- targetRuleIdsIntegerList of target rule IDs.

API error codes

CodeDescriptionSolution
4007Promotion identifier already exists for the programCheck the promotion id and ensure it is unique.
4003A promotion with the same name exists for the programCheck the promotion name and ensure it is unique.
4011Given start date is null or emptyCheck the promotion start date and ensure it is in the correct format
4012Given end date is null or emptyCheck the promotion end date and ensure it is in the correct format
4074For SourceType UserCreated, TargetGroupId and TargetRuleId are mandatoryEnter the TargetGroupID and TargetRuleID for the promotion
4079Promotion Source Type cannot be null or emptyEnter the promotion source type
4075UCC Promotions should always have one RuleSetEnsure that only one ruleset is passed. Add the rulesets for the promotion if not added.
4076Invalid UCC Promotions Ruleset check for ruleSetName, ContextId, OrgId, ContextType and start & End is not nullCheck if the mandatory rule set fields are passed.
4076Invalid UCC Promotions Rules passed check for expression , expressionJson and name is not nullCheck if the mandatory rule set fields are correct.
4080Invalid UCC Promotions Actions, Both key and value in cannot be null or emptyCheck if the mandatoryPropertiesValues key / value is null or Empty.
4078Invalid name in Promotions RuleSet FilterCheck the filter name and ensure it is valid.
Language
Credentials
Basic
base64
:
URL
Click Try It! to start a request and see the response here!