Approve or Reject Benefit

Approve or reject a benefit that is pending approval.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

Approve or Reject Benefit

Reviews a benefit in PENDING_APPROVAL status. Approving publishes the benefit and rejecting returns it to DRAFT for further edits.

  • Approve: the benefit transitions to LIVE if its start date has passed, or UPCOMING if the start date is still in the future. Approval assigns a benefitIdentifier (a UUID) and a loyaltyBenefitRecordId (an integer), and returns a communicationApprovalStatus result. loyaltyBenefitRecordId is what keeps the benefit's record in sync when it's published to the points engine on each approval. Approving a later edit of the same benefit (a draft fork) updates the same published record rather than creating a duplicate.
  • Reject: the benefit transitions back to DRAFT so the maker can revise and resubmit it.

A benefit must be in PENDING_APPROVAL status to be reviewed. Submit a draft with Submit Benefit for Approval.

Example request

curl -X POST "https://eu.intouch.capillarytech.com/v3/benefits/86c29c3653f74c0a9f1b2c3d4e5f6a7b/review" \
  -H "Authorization: Basic <base64-encoded-credentials>" \
  -H "Content-Type: application/json" \
  -d '{
    "approvalStatus": "APPROVE",
    "comment": "Approved for launch",
    "reviewedBy": 123456,
    "lastUpdatedBy": 123456
  }'

Prerequisites

  • Authentication: Basic auth or OAuth token with reviewer permissions for loyalty program management.
  • The benefit must be in PENDING_APPROVAL status.

Resource information

HTTP methodPOST
AuthenticationBasic or OAuth
Pagination supported?NO
Rate limitYES
Batch supportNO

Path parameters

FieldTypeRequiredDescription
loyaltyBenefitIdstringRequiredUnique ID of the benefit to review, returned by Create Benefit.

Body parameters

FieldTypeRequiredDescription
approvalStatusenumRequiredReview decision. Case-sensitive. Supported values: APPROVE: publishes the benefit — transitions to LIVE if the start date has passed, or UPCOMING if it's still in the future, and assigns benefitIdentifier and loyaltyBenefitRecordId, REJECT: returns the benefit to DRAFT so the maker can revise and resubmit it.
commentstringOptionalReviewer's note. Max 150 characters. Returned as comments in the response.
reviewedByintegerRequiredTill ID of the reviewer. Retrieve till IDs with the Get Active Tills API.
lastUpdatedByintegerRequiredTill ID of the person performing the action. Retrieve till IDs with the Get Active Tills API.

Example response

The Approved tab shows the response to an APPROVE action where the start date is in the future, so the benefit becomes UPCOMING. The Rejected tab shows the response to a REJECT action, where the benefit returns to DRAFT and benefitIdentifier, loyaltyBenefitRecordId, and communicationApprovalStatus are null.

{
  "data": {
    "loyaltyBenefitId": "86c29c3653f74c0a9f1b2c3d4e5f6a7b",
    "version": 7,
    "metadata": {
      "name": "Birthday bonus",
      "description": "Extra points on birthday month",
      "programId": "973",
      "orgId": 12345,
      "expiryType": "CUSTOM",
      "status": "UPCOMING",
      "customerEligibilityType": null,
      "benefitIdentifier": "5e9f6a2b-1c3d-4e5f-8a7b-9c1d2e3f4a5b",
      "loyaltyBenefitRecordId": 287,
      "startDate": "2026-08-01T00:00:00+05:30",
      "endDate": "2027-01-31T23:59:59+05:30",
      "timezoneName": "Asia/Kolkata",
      "createdOn": "2026-06-23T14:32:24+05:30",
      "lastModifiedOn": "2026-06-23T14:40:31+05:30",
      "createdBy": 123456,
      "lastModifiedBy": 123456,
      "draftDetails": null
    },
    "benefitCategoryId": -1,
    "tierIds": [
      8159,
      8165
    ],
    "optin": {
      "basedOn": null,
      "audienceMapping": null,
      "activities": null,
      "restrictions": null,
      "optInStartDate": "2026-08-01T09:00:00+05:30",
      "optInEndDate": "2027-01-31T18:00:00+05:30"
    },
    "activities": [
      {
        "type": "SINGLE",
        "event": "TransactionAdd",
        "allCycles": []
      }
    ],
    "limits": null,
    "configAttributes": null,
    "liabilityOwnerSplitInfo": null,
    "workflowMetadata": null,
    "communicationApprovalStatus": {
      "success": true,
      "message": "No communications to approve",
      "response": null,
      "statusCode": 200
    },
    "parentId": null,
    "parentDetails": null,
    "comments": "Approved for launch",
    "id": "6a3a4ba0c1d2e3f4a5b6c7d8"
  },
  "errors": null,
  "warnings": null
}
{
  "data": {
    "loyaltyBenefitId": "86c29c3653f74c0a9f1b2c3d4e5f6a7b",
    "version": 3,
    "metadata": {
      "name": "Birthday bonus",
      "description": "Extra points on birthday month",
      "programId": "973",
      "orgId": 12345,
      "expiryType": "CUSTOM",
      "status": "DRAFT",
      "customerEligibilityType": null,
      "benefitIdentifier": null,
      "loyaltyBenefitRecordId": null,
      "startDate": "2026-08-01T00:00:00+05:30",
      "endDate": "2027-01-31T23:59:59+05:30",
      "timezoneName": "Asia/Kolkata",
      "createdOn": "2026-06-23T14:32:24+05:30",
      "lastModifiedOn": "2026-06-23T14:39:57+05:30",
      "createdBy": 123456,
      "lastModifiedBy": 123456,
      "draftDetails": null
    },
    "benefitCategoryId": -1,
    "tierIds": [8159, 8165],
    "optin": {
      "basedOn": null,
      "audienceMapping": null,
      "activities": null,
      "restrictions": null,
      "optInStartDate": "2026-08-01T09:00:00+05:30",
      "optInEndDate": "2027-01-31T18:00:00+05:30"
    },
    "activities": [
      {
        "type": "SINGLE",
        "event": "TransactionAdd",
        "allCycles": []
      }
    ],
    "limits": null,
    "configAttributes": null,
    "liabilityOwnerSplitInfo": null,
    "workflowMetadata": null,
    "communicationApprovalStatus": null,
    "parentId": null,
    "parentDetails": null,
    "comments": "Needs revised end date",
    "id": "6a3a4ba0c1d2e3f4a5b6c7d8"
  },
  "errors": null,
  "warnings": null
}

Response parameters

FieldTypeDescription
dataobjectObject containing the benefit after the review. Has the same fields as the Get Benefit response.
.metadataobjectObject containing workflow stage data.
..statusenumStage after the review. LIVE or UPCOMING after approval, DRAFT after rejection. Possible values: DRAFT, PENDING_APPROVAL, LIVE, UPCOMING, PAUSED, STOPPED.
..benefitIdentifierstringIdentifier assigned on approval, a UUID. null after rejection.
..loyaltyBenefitRecordIdintegerRecord ID assigned on approval. null after rejection.
.communicationApprovalStatusobjectObject containing the communication approval result, set on approval. null after rejection.
..successbooleantrue if the communication approval succeeded.
..messagestringResult message of the communication approval.
..responseobjectAdditional response payload. null when none.
..statusCodeintegerHTTP status code of the communication approval result.
.commentsstringReviewer's note, echoed from the comment field in the request.
errorsarrayError list. null on success.
warningsarrayWarning list. null on success.

Error & warning codes

CodeTypeDescription
loyaltyBenefitId=<id>ErrorNo benefit matches the given loyaltyBenefitId. HTTP 404.
requires status=PENDING_APPROVALErrorThe benefit is not in PENDING_APPROVAL status, so it can't be reviewed. HTTP 404.

Note: These errors return a generic numeric code on the wire rather than an error-specific number. The Code column shows the identifying text carried in the error message.


Path Params
string
required
Body Params
string
enum
required
Allowed:
string
integer
required
integer
required
Headers
string
Responses

401

Authentication failed

404

No benefit in PENDING_APPROVAL matches the given loyaltyBenefitId

Language
Credentials
Basic
base64
:
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json