post
https://{host/v3/promotions//review
Recent Requests
Log in to see full request history
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Loading…
The Review Unified Promotions API allows you to manage the lifecycle of your campaigns through a formal approval workflow. Instead of launching promotions without review, you can use this endpoint to validate all rules and officially transition a promotion from a PENDING_APPROVAL state to ACTIVE, ensuring it is fully reviewed for customer participation.
NoteOnly promotions in
PENDING_APPROVALstatus can be reviewed. To move a promotion fromDRAFTtoPENDING_APPROVALbefore review, use the Submit Promotion for Approval endpoint.
Example request
curl --location 'https://eu.api.capillarytech.com/v3/promotions/[promotionid]/review' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic xNTJkMjM0Yjcw' \
--data '{
"approvalStatus": "APPROVE"
}'Prerequisites
- Authentication: Basic or OAuth authentication.
- Default access group
Path Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| unifiedPromotionId | string | Yes | Specifies the unique identifier (id) of the promotion being reviewed. This ID identifies which promotion the approval or rejection applies to. Example: "68f708709c1b226be345eebb" |
Body parameters
| Field | Type | Required | Description |
|---|---|---|---|
| approvalStatus | string | Yes | Specifies the review action being taken. This determines the outcome of the review process, for example making the promotion active or sending it back to draft. Supported Values: String representing the approval action APPROVE, REJECT. |
| comment | string | Optional | Specifies an optional comment (max 150 chars) to provide context for the review decision. Eg. Adding a reason for rejection. Supported Values: String (max length 150). Example: "Approved, ready for launch." or "Rejected, please update expiry date." |
Example response
{
"data": {
"metadata": {
"name": "Promogold",
"description": "newProm43oTest123",
"programId": "2607",
"orgId": 51174,
"startDate": "2025-10-01T00:00:00+05:30",
"endDate": "2025-10-31T23:59:00+05:30",
"timezoneName": "Asia/Kolkata",
"promotionType": "GENERIC",
"status": "COMPLETED",
"promoIdentifier": "fdee323d-7a5e33342c0-b438-9892085a0a7c",
"promotionId": 1133594588,
"createdOn": "2025-11-01T15:03:33+05:30",
"lastModifiedOn": "2025-11-01T15:03:59+05:30",
"createdBy": 50685521,
"lastModifiedBy": 50685521,
"loyaltyEarningType": null,
"version": null,
"draftDetails": null,
"loyaltyConfigMetaData": {
"isStackable": false,
"isConsideredForRanking": false,
"isExclusive": false,
"isAlwaysApply": false,
"skipEarnedDateCheckOnRedeem": null
},
"promotionMetadata": [],
"commonStrategies": null,
"promotionMode": "UNIFIED"
},
"customerEnrolment": {
"enrolmentMethod": "TRANSACTION"
},
"activities": [
{
"type": "SINGLE",
"id": "activity_1761824716197",
"name": "Activity 1",
"commonCycleActionMapping": [
{
"cycle": "Cycle_1",
"actions": [
{
"id": "4706439",
"actionName": "AWARD_POINTS_ACTION",
"actionClass": "com.capillary.shopbook.pointsengine.endpoint.impl.action.AwardPointsActionImpl",
"description": "Fixed10",
"mandatoryPropertiesValues": {
"AwardStrategy": "121429",
"ExpiryStrategy": "109006",
"PointsRoundingStrategy": "ACTUAL",
"SourceValueRoundingStrategy": "ACTUAL",
"DelayStrategy": "AS_DEFINED_IN_ALLOCATION_STRATEGY",
"EvaluatedEntity": "USER",
"DelayExtendedFieldName": "",
"ProRateOnSourceValue": "EVENT_DEFAULT_VALUE",
"PointType": "Main"
},
"mandatoryComplexPropertiesValues": {}
}
],
"startDate": "2025-10-01",
"endDate": "2025-10-31",
"rulesetId": "1514933"
}
],
"event": "TransactionAdd",
"expJSON": "{\n \"arity\": \"literal\",\n \"type\": \"boolean:primitive\",\n \"value\": \"true\"\n}",
"cycles": [],
"milestones": [],
"allCycles": []
}
],
"comments": "dsd",
"parentId": null,
"parentDetails": null,
"version": 1,
"limits": [],
"liabilityOwnerSplitInfo": [],
"id": "69034fe43d40cd1e08fb66d8",
"workflowMetadata": {
"enrolment": {
"basedOn": null,
"activities": null,
"audienceMapping": null,
"restrictions": null
},
"optin": {
"basedOn": null,
"audienceMapping": null,
"activities": null,
"restrictions": null
}
},
"communicationApprovalStatus": {
"success": true,
"message": "No communications to approve",
"response": null,
"statusCode": 200
}
},
"errors": null,
"warnings": null
}Response parameters
| Field | Type | Description |
|---|---|---|
| data | Object | Defines the main data object containing the updated promotion (UnifiedPromotion). Possible Values: A valid UnifiedPromotion object. |
| .id | String | Specifies the unique system-generated identifier for the unified promotion. |
| .metadata | Object | Defines the object containing all metadata for the promotion. |
| ..name | String | Specifies the name of the promotion. |
| ..description | String | Specifies the description of the promotion. |
| ..programId | String | Specifies the program ID associated with the promotion. Possible Values: String or Integer Program ID. |
| ..orgId | Integer (int64) | Specifies the organization ID. Possible Values: Integer Org ID. |
| ..startDate | String (date-time) | Indicates the start date and time of the promotion in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| ..endDate | String (date-time) | Indicates the end date and time of the promotion in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| ..timezoneName | String | IANA time zone name for the promotion. This is a reference label to identify the time zone where the promotion is created. |
| ..promotionType | String | Specifies the type of promotion. |
| ..status | String | Indicates the current status of the promotion, updated based on the review action. |
| ..promoIdentifier | String | Specifies a unique string identifier for the promotion. |
| ..promotionId | Integer (int32) | Specifies the legacy numerical promotion ID. |
| ..createdOn | String (date-time) | Indicates the creation date and time of the promotion in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| ..lastModifiedOn | String (date-time) | Indicates the last modification date and time of the promotion in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| ..createdBy | Integer (int32) | Specifies the user ID of the creator. |
| ..lastModifiedBy | Integer (int32) | Specifies the user ID of the last modifier. |
| ..loyaltyEarningType | String | Indicates the loyalty earning type. |
| ..version | String | Specifies the version string of the promotion. |
| ..draftDetails | Object | Defines details if the promotion is a draft. |
| ...id | String | Specifies the draft's unique ID. |
| ...status | String | Specifies the draft's status. |
| ...version | Integer (int32) | Specifies the draft version number. |
| ...lastModifiedBy | Integer (int32) | Specifies the user who last modified the draft. |
| ...lastModifiedOn | String (date-time) | Indicates the last modification date and time of the draft in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| ..loyaltyConfigMetaData | Object | Defines loyalty-specific configurations. |
| ...isStackable | Boolean | Indicates if the promotion is stackable. Possible Values: true, false. |
| ...isConsideredForRanking | Boolean | Indicates if the promotion is considered for ranking. Possible Values: true, false. |
| ...isExclusive | Boolean | Indicates if the promotion is exclusive. Possible Values: true, false. |
| ...isAlwaysApply | Boolean | Indicates if the promotion should always apply. Possible Values: true, false. |
| ...skipEarnedDateCheckOnRedeem | Boolean | Indicates if the earned date check should be skipped on redemption. Possible Values: true, false. |
| ..promotionMetadata | Array (Object) | Defines a list of custom key-value metadata pairs. |
| ...isBrandDefined | String | Specifies if the metadata is defined by the brand. |
| ...key | String | Specifies the metadata key. |
| ...value | String | Specifies the metadata value. |
| ..commonStrategies | Object | Defines common strategies, like expiry. |
| ...expiry | Array (Object) | Defines a list of expiry strategies. |
| ....strategyTypeId | Integer (int32) | Specifies the strategy type ID. |
| ....propertyValues | String | Specifies the property values for the strategy. |
| ....owner | String | Specifies the owner of the strategy. |
| ....useCommonExpiryStrategy | Boolean | Indicates if the common expiry strategy is used. Possible Values: true, false. |
| ....strategyRef | String | Specifies the strategy reference. Possible Values: String. |
| ....strategySubType | String | Indicates the strategy sub-type. Possible Values: ROLLING_EXPIRY_STRATEGY, DEFAULT. |
| ..promotionMode | String | Indicates the promotion mode. Possible Values: LEGACY, UNIFIED. |
| .customerEnrolment | Object | Defines the member enrolment rules (CustomerEnrolment). Possible Values: A valid CustomerEnrolment object. |
| ..enrolmentMethod | String | Indicates the method of member enrolment. Possible Values: TRANSACTION, IMPORT. |
| ..audienceGroups | Array (Object) | Defines a list of audience groups for enrolment (AudienceGroupDetails). Possible Values: Array of AudienceGroupDetails objects or null. |
| ...audienceGroupId | Integer (int64) | Specifies the unique ID for the audience group. Possible Values: Integer ID. |
| ...audienceGroupName | String | Specifies the name of the audience group. Possible Values: String. |
| ...description | String | Specifies the description of the audience group. Possible Values: String. |
| .activities | Array (Object) | Defines a list of activities (SingleActivity or GroupActivity). Possible Values: Array of valid Activity objects. |
| ..id | String | Specifies the unique ID for the activity. Possible Values: String ID. |
| ..type | String | Specifies the type of the activity. Possible Values: SINGLE, GROUP. |
| ..name | String | Specifies the name of the activity. Possible Values: String. |
| ..refId | String | Specifies the reference ID for the activity. Possible Values: String or null. |
| ..parentId | String | Specifies the parent activity's ID. Possible Values: String ID or null. |
| ..commonCycleActionMapping | Array (Object) | Defines action mappings for common cycles (CycleActionMapping). Possible Values: Array of CycleActionMapping objects. |
| ...cycle | String | Specifies the cycle name/ID. Possible Values: String ID. |
| ...defaultValue | Number (double) | Specifies the default value for the action. Possible Values: Number or null. |
| ...actions | Array (Object) | Defines a list of actions (Action). Possible Values: Array of Action objects. |
| ....id | String | Specifies the action ID. Possible Values: String ID. |
| ....actionName | String | Specifies the action name. Possible Values: String representing a valid action name. |
| ....actionClass | String | Specifies the action class. Possible Values: Fully qualified Java class name string. |
| ....description | String | Specifies the action description. Possible Values: String or null. |
| ....mandatoryPropertiesValues | Object | Defines key-value pairs for mandatory properties. Possible Values: Object with string keys/values. |
| ....mandatoryComplexPropertiesValues | Object | Defines key-value pairs for mandatory complex properties. Possible Values: Object with string keys and object values, or null. |
| ....embeddedStrategies | Array (Object) | Defines a list of embedded StrategyInfo objects. Possible Values: Array of StrategyInfo objects or null. |
| ...startDate | String (date-time) | Indicates the start date and time of the cycle mapping in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| ...endDate | String (date-time) | Indicates the end date and time of the cycle mapping in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| ...rulesetId | String | Specifies the cycle mapping ruleset ID. Possible Values: String ID or null. |
| ..rulesetId | String | Specifies the ruleset ID for the activity. Possible Values: String ID or null. |
| ..cycles | Array (Object) | Defines a list of general cycles (Cycle). Possible Values: Array of Cycle objects or null. |
| ..event | String | Specifies the event associated with the single activity. Possible Values: String event name. |
| ..ruleExpression | String | Specifies the rule expression for the single activity. Possible Values: String DSL or null. |
| ..expJSON | String | Specifies the rule expression in JSON format. Possible Values: JSON string or null. |
| ..frequencyType | String | Specifies the frequency type. Possible Values: String or null. |
| ..targetEvaluationType | String | Specifies the target evaluation type. Possible Values: String or null. |
| ..targetCycleStartDate | String (date-time) | Indicates the start date and time of the target cycle in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| ..targetCycleEndDate | String (date-time) | Indicates the end date and time of the target cycle in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| ..activityCycles | Array (Object) | Defines activity-specific cycles (ActivityCycle). Possible Values: Array of ActivityCycle objects or null. |
| ..milestones | Array (Object) | Defines milestones (Milestone). Possible Values: Array containing max one Milestone object, or null. |
| ..allCycles | Array (Object) | Defines a list of all cycles. Possible Values: Array of cycle objects or null. |
| ..event | String | Specifies the event associated with the group activity. |
| ..combinationType | String | Indicates how child activities are combined. |
| ..children | Array (Object) | Defines a nested list of child GroupActivity or SingleActivity objects. |
| ..ruleExpression | String | Specifies the rule expression for the group activity. |
| ..expJSON | String | Specifies the rule expression in JSON format. |
| .comments | String | Specifies any comments on the promotion. |
| .parentId | String | Specifies the ID of the parent promotion. |
| .parentDetails | Object | Defines details of the parent promotion. |
| ..id | String | Specifies the parent promotion ID. |
| ..status | String | Specifies the parent promotion status. |
| ..version | Integer (int32) | Specifies the parent promotion version. |
| ..lastModifiedBy | Integer (int32) | Specifies the user who last modified the parent in ISO 8601 format. |
| ..lastModifiedOn | String (date-time) | Indicates the last modification date and time of the parent promotion in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| .version | Integer (int32) | Specifies the version number of the promotion. |
| .limits | Array (Object) | Defines a list of limits for the promotion. |
| ..id | Integer (int64) | Specifies the limit ID. |
| ..entityScope | String | Indicates the scope of the limit. |
| ..granularity | String | Indicates the granularity of the limit. |
| ..entityId | Integer (int64) | Specifies the entity ID the limit applies to. |
| ..actionType | String | Indicates the action type being limited. |
| ..actionSubTypeId | String | Specifies the action sub-type ID. |
| ..limitType | String | Indicates the type of limit. |
| ..limitValue | Number | Specifies the value of the limit. |
| ..period | Object | Defines the time period for the limit. |
| ...id | Integer (int64) | Specifies the period ID. |
| ...periodType | String | Indicates the type of period. |
| ...periodUnit | String | Indicates the unit for the period. |
| ...periodValue | Integer (int32) | Specifies the value for the period. |
| ...periodStartDay | String | Indicates the start day for weekly periods. |
| ...startDate | String (date-time) | Indicates the fixed start date for the period in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| ...endDate | String (date-time) | Indicates the fixed end date for the period in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| ..createdOn | String (date-time) | Indicates the creation date and time of the limit in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| ..createdBy | Integer (int64) | Specifies the user ID of the limit creator. |
| ..lastUpdatedOn | String (date-time) | Indicates the last update date and time of the limit in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| ..lastUpdatedBy | Integer (int64) | Specifies the user ID of the last user who have updated the review status. |
| ..active | Boolean | Indicates if the limit is active. Possible Values: true, false. |
| .liabilityOwnerSplitInfo | Array (Object) | Defines how liability is split. |
| ..orgId | Integer (int32) | Specifies the organization ID. |
| ..liabilityOwnerId | Integer (int32) | Specifies the liability owner ID. |
| ..componentId | Integer (int32) | Specifies the component ID. |
| ..componentType | String | Indicates the component type. |
| ..createdBy | Integer (int32) | Specifies the user ID of the creator. Possible Values: Integer user ID. |
| ..ratio | Number (double) | Specifies the liability split ratio. |
| ..liabilityOwnerName | String | Specifies the liability owner's name. |
| ..liabilityOwnerType | String | Indicates the liability owner's type. Possible Values: PARTNER, PROGRAM. |
| ..active | Boolean | Indicates if the split info is active. Possible Values: true, false. |
| .workflowMetadata | Object | Defines workflow metadata for enrolment and opt-in. |
| ..enrolment | Object | Defines enrolment workflow details. |
| ...basedOn | String | Indicates the basis for enrolment. |
| ...activities | Array (Object) | Defines activities triggering enrolment. |
| ...audienceMapping | Array (Object) | Defines audience mappings. |
| ....groupId | Integer (int64) | Specifies the group ID. |
| ....groupName | String | Specifies the group name. |
| ...restrictions | Object | Defines enrolment restrictions. |
| ....optinExpiryBasedOn | Object | Defines opt-in expiry. |
| .....value | Integer (int32) | Specifies the expiry value. |
| .....expiryDate | String (date-time) | Indicates the expiry date and time of the opt-in status in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| .....type | String | Specifies the expiry type. |
| ....enrolmentExpiryBasedOn | Object | Defines enrolment expiry. |
| .....value | Integer (int32) | Specifies the expiry value. |
| .....expiryDate | String (date-time) | Indicates the expiry date and time of the enrolment status in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| .....type | String | Specifies the expiry type. |
| ....optinLimitPerCustomer | Object | Defines opt-in limit. |
| .....value | Integer (int32) | Specifies the limit value. |
| .....type | String | Specifies the limit period type. |
| .....periodType | String | Specifies the window type. |
| .....periodUnit | String | Specifies the period unit. |
| ....maxRedemptionsPerEarnPerCustomer | Object | Defines redemption limit. |
| .....value | Integer (int32) | Specifies the limit value. |
| .....type | String | Specifies the limit period type. |
| .....periodType | String | Specifies the window type. |
| .....periodUnit | String | Specifies the period unit. |
| ....enrolmentLimitPerPromotion | Object | Defines total enrolment limit (PromotionRestrictionsConfig). |
| .....value | Integer (int32) | Specifies the limit value. |
| .....type | String | Specifies the limit period type. |
| .....periodType | String | Specifies the window type. |
| .....periodUnit | String | Specifies the period unit. |
| ....enrolmentLimitPerCustomer | Object | Defines enrolment limit per customer. |
| .....value | Integer (int32) | Specifies the limit value. |
| .....type | String | Specifies the limit period type. |
| .....periodType | String | Specifies the window type. |
| .....periodUnit | String | Specifies the period unit. |
| ....maxPointsPerEarnPerCustomer | Object | Defines max points per earn limit. |
| .....value | Integer (int32) | Specifies the limit value. |
| .....type | String | Specifies the limit period type. |
| .....periodType | String | Specifies the window type. |
| .....periodUnit | String | Specifies the period unit. |
| ..optin | Object | Defines opt-in workflow details (Optin). Possible Values: A valid Optin object or empty object . |
| ...basedOn | String | Indicates the basis for opt-in. |
| ...activities | Array (Object) | Defines activities. |
| ...audienceMapping | Array (Object) | Defines audience mappings. |
| ....groupId | Integer (int64) | Specifies the group ID. |
| ....groupName | String | Specifies the group name. |
| ...restrictions | Object | Defines opt-in restrictions. |
| ....optinExpiryBasedOn | Object | Defines opt-in expiry. |
| .....value | Integer (int32) | Specifies the expiry value. |
| .....expiryDate | String (date-time) | Indicates the expiry date and time of the opt-in status in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| .....type | String | Specifies the expiry type. |
| ....enrolmentExpiryBasedOn | Object | Defines enrolment expiry. |
| .....value | Integer (int32) | Specifies the expiry value. |
| .....expiryDate | String (date-time) | Indicates the expiry date and time of the enrolment status in ISO 8601 format, returned in the server time zone. EU server example 2025-12-16T14:30:45Z → 16 December 2025, 14:30:45 (UTC) India server example 2025-12-16T14:30:45+05:30 → 16 December 2025, 14:30:45 (IST) Note: The response time zone always matches the server time zone, regardless of the time zone offset in the request. |
| .....type | String | Specifies the expiry type. |
| ....optinLimitPerCustomer | Object | Defines opt-in limit. |
| .....value | Integer (int32) | Specifies the limit value. |
| .....type | String | Specifies the limit period type. |
| .....periodType | String | Specifies the window type. |
| .....periodUnit | String | Specifies the period unit. |
| ....maxRedemptionsPerEarnPerCustomer | Object | Defines redemption limit. |
| .....value | Integer (int32) | Specifies the limit value. Possible Values: Integer or null. |
| .....type | String | Specifies the limit period type. |
| .....periodType | String | Specifies the window type. |
| .....periodUnit | String | Specifies the period unit. |
| ....enrolmentLimitPerPromotion | Object | Defines total enrolment limit. |
| .....value | Integer (int32) | Specifies the limit value. |
| .....type | String | Specifies the limit period type. |
| .....periodType | String | Specifies the window type. |
| .....periodUnit | String | Specifies the period unit. |
| ....enrolmentLimitPerCustomer | Object | Defines enrolment limit per customer. Possible Values: A valid PromotionRestrictionsConfig object or null. |
| .....value | Integer (int32) | Specifies the limit value. |
| .....type | String | Specifies the limit period type. |
| .....periodType | String | Specifies the window type. |
| .....periodUnit | String | Specifies the period unit. |
| ....maxPointsPerEarnPerCustomer | Object | Defines max points per earn limit. |
| .....value | Integer (int32) | Specifies the limit value. |
| .....type | String | Specifies the limit period type. |
| .....periodType | String | Specifies the window type. |
| .....periodUnit | String | Specifies the period unit. |
| .communicationApprovalStatus | Object | Defines the status of communication approval. |
| ..success | Boolean | Indicates if the approval status check was successful. |
| ..message | String | Specifies the status message. |
| ..response | Object | Defines the nested response object. |
| ..statusCode | Integer (int32) | Specifies the status code. |
| errors | Array (Object) | Defines a list of errors that occurred, if any. |
| .code | Integer (int64) | Specifies the error code. Possible Values: Integer error code. |
| warnings | Array (Object) | Defines a list of warnings, if any. |
| .message | String | Specifies the warning message. |
Warning Messages
| Warning Message | |
|---|---|
| Communication Approval Failed. The promotion status was updated, but associated communications could not be approved. | Check the communicationApprovalStatus field in the response data for specific failure details from the Creatives service. |
| Journey Approval Failed. The promotion was successfully approved/active, but the linked journey could not be approved. | Manually verify the journey status in the Journey Builder or retry the approval. |
Error Codes
| Error Code | Description |
|---|---|
| 310151 | Invalid approval status. Use only APPROVE or REJECT in the approvalStatus field. |
| 300006 | Service operation failed. An internal service (like Journey or Points Engine) failed; check the server logs for the specific cause. |
| 300005 | Access denied. Ensure your authentication token is valid and you have permissions for the requested Organization ID. |
| 300004 | Invalid input. The request body is malformed or missing required fields; ensure the JSON structure is correct. |
| 999999 | Promotion not found. Use a valid promotionId and ensure the promotion exists and belongs to your organization. |
| 999999 | Invalid promotion status. Only promotions currently in PENDING_APPROVAL status can be reviewed. |
| 999999 | Comment too long. Ensure the comment field in your request does not exceed 150 characters. |
| 310174 | No edits allowed. Modifications are restricted while the promotion is in the PENDING_APPROVAL state. |
