---
title: Update Live Bonus Rule
slug: update-live-bonus-rule
docTags: 
createdAt: 2026-08-31T14:16:04.237Z
---

{
  "id": "RTmo3uAN2vunHX-u-euGf",
  "type": "api-oas-v2",
  "data": {
    "method": "PATCH",
    "url": "https://api.b.preview.loyaltyservices.io/api/v3/bonus-rules/{code}",
    "servers": [
      {
        "url": "https://api.b.preview.loyaltyservices.io/api/v3/bonus-rules/{code}"
      }
    ],
    "name": "Update Live Bonus Rule",
    "description": "<p>Update a bonus rule whose data release item status is APPROVED, PUBLISHED, or LIVE. The following fields may be updated: name, startDate, endDate, statusCode, campaignName, minUserRoleCode, contentKey, displayOnline, displayOnlineUntilDate, externalCode, enrollmentCode, invoicing, and results.cancellable.</p>",
    "contentType": "application/json",
    "request": {
      "pathParameters": [
        {
          "kind": "required",
          "name": "code",
          "type": "string",
          "description": "Bonus rule code"
        }
      ],
      "headerParameters": [
        {
          "name": "accept",
          "type": "string",
          "kind": "optional",
          "description": "Generated from available response content types",
          "enum": [
            "application/json"
          ],
          "default": "application/json"
        }
      ],
      "queryParameters": [],
      "bodyDataParameters": [
        {
          "kind": "required",
          "name": "body",
          "type": "object",
          "description": "Fields to update on the live bonus rule",
          "customType": "BonusRule",
          "schema": [
            {
              "name": "code",
              "kind": "optional",
              "type": "string",
              "description": "<p>Unique code for the bonus rule (bonusId)</p>",
              "example": "ENROLLMENT_BONUS_2026",
              "minLength": 1,
              "maxLength": 100
            },
            {
              "name": "externalCode",
              "kind": "optional",
              "type": "string",
              "description": "<p>Optional cross-system reference code used when this rule originates from or must reconcile with an external platform.</p>",
              "example": "EXT-12345",
              "maxLength": 100
            },
            {
              "name": "name",
              "kind": "optional",
              "type": "string",
              "description": "<p>Human-readable label for this rule shown in the admin UI.</p>",
              "example": "Enrollment Bonus 2026",
              "minLength": 1,
              "maxLength": 300
            },
            {
              "name": "typeCode",
              "kind": "optional",
              "type": "string",
              "description": "<p>Categorises the triggering event for this rule. Values for this field need to match datacodes setup with a CodeType of: BonusType. e.g. Enrollment, Stay, or Manual.</p>",
              "example": "Enrollment"
            },
            {
              "name": "enrollmentCode",
              "kind": "optional",
              "type": "string",
              "description": "Enrollment tracking code associated with this rule. Only applicable when typeCode is Enrollment.",
              "example": "ENROLL-2026-Q1"
            },
            {
              "name": "statusCode",
              "kind": "optional",
              "type": "string",
              "description": "<p>Lifecycle status of the rule. Values for this field need to match datacodes setup with a CodeType of: ProBonusStatus. Active (A) rules are eligible to fire during processing; Inactive (I) rules are skipped.</p>",
              "example": "A"
            },
            {
              "name": "startDate",
              "kind": "optional",
              "type": "string<date>",
              "description": "First date on which qualifying transactions can trigger this rule.",
              "example": "2026-01-01",
              "format": "date"
            },
            {
              "name": "endDate",
              "kind": "optional",
              "type": "string<date>",
              "description": "Last date on which qualifying transactions can trigger this rule. Omit or set to null for no expiry.",
              "example": "2026-12-31",
              "format": "date"
            },
            {
              "name": "campaignName",
              "kind": "optional",
              "type": "string",
              "description": "Name of the campaign this rule is grouped under.",
              "example": "Q1 2026 Enrollment Campaign"
            },
            {
              "name": "manuallyProcessed",
              "kind": "optional",
              "type": "boolean",
              "description": "<p>When true, the rule is excluded from automated accrual processing and must be triggered explicitly by operations staff.</p>",
              "example": false
            },
            {
              "name": "displayOnline",
              "kind": "optional",
              "type": "boolean",
              "description": "<p>Controls whether this bonus is surfaced on member-facing online channels.</p>",
              "example": true
            },
            {
              "name": "displayOnlineUntilDate",
              "kind": "optional",
              "type": "string<date>",
              "description": "<p>Date after which this rule is no longer surfaced on member-facing online channels. Only evaluated when displayOnline is true.</p>",
              "example": "2026-12-31",
              "format": "date"
            },
            {
              "name": "minUserRoleCode",
              "kind": "optional",
              "type": "string",
              "description": "Name of the minimum user role required to view or interact with this rule in the admin UI.",
              "example": "Admin"
            },
            {
              "name": "contentKey",
              "kind": "optional",
              "type": "string",
              "description": "Identifier used to associate this rule with localised content.",
              "example": "promo-summer-2026"
            },
            {
              "name": "clientTag",
              "kind": "optional",
              "type": "string",
              "description": "<p>Client-defined tag code applied to this rule. Values for this field need to match datacodes setup with a CodeType of: BonusClientTag. Requires feature flag bonuses-client-tag to be enabled.</p>",
              "example": "VIP"
            },
            {
              "name": "workflowStatus",
              "kind": "optional",
              "type": "string",
              "description": "<p>Editorial state of the rule. Values for this field need to match datacodes setup with a CodeType of: RuleWorkflowStatus. WORKING indicates the rule is still being configured; READY indicates it has been approved for deployment.</p>",
              "example": "WORKING"
            },
            {
              "name": "rawExpression",
              "kind": "optional",
              "type": "string",
              "description": "Boolean eligibility expression evaluated against member and accrual context."
            },
            {
              "name": "dataReleaseName",
              "kind": "optional",
              "type": "string",
              "description": "<p>Name of the data release bundle this rule is assigned to. Pass a name to assign the rule to an existing release; omit or set to null to leave unassigned.</p>",
              "example": "Rules Release 2025",
              "maxLength": 250
            },
            {
              "name": "comments",
              "kind": "optional",
              "type": "string",
              "description": "<p>Free-text notes for this rule visible to admin users. Client-specific — may not be available on all deployments.</p>",
              "example": "Created for Q1 campaign",
              "maxLength": 200
            },
            {
              "name": "limits",
              "kind": "optional",
              "type": "object",
              "description": "Cap configuration controlling how many times and how many points a bonus rule can award.",
              "modelRef": "#/components/schemas/BonusRuleLimits",
              "customType": "BonusRuleLimits",
              "schema": [
                {
                  "name": "occurrenceLimit",
                  "kind": "optional",
                  "type": "integer<int64>",
                  "description": "Maximum number of times this bonus rule can fire for a single member over its lifetime. Omit or set to null for unlimited firings.",
                  "example": 3,
                  "format": "int64"
                },
                {
                  "name": "pointInstanceLimit",
                  "kind": "optional",
                  "type": "number",
                  "description": "<p>Maximum points a member can earn from a single firing of this bonus rule. Acts as a per-trigger cap on the calculated award.</p>",
                  "example": 1000
                },
                {
                  "name": "pointMinInstanceLimit",
                  "kind": "optional",
                  "type": "integer<int32>",
                  "description": "Minimum point threshold per transaction instance required for this bonus rule to fire.",
                  "example": -5,
                  "format": "int32"
                },
                {
                  "name": "pointLimit",
                  "kind": "optional",
                  "type": "number",
                  "description": "Cumulative point cap per member across all firings of this bonus rule. The rule stops awarding once a member reaches this total.",
                  "example": 5000
                },
                {
                  "name": "graceLimit",
                  "kind": "optional",
                  "type": "integer<int32>",
                  "description": "<p>Number of days after endDate during which late-arriving transactions are still eligible to trigger this bonus rule.</p>",
                  "example": 30,
                  "format": "int32"
                },
                {
                  "name": "timePeriodOccurrenceLimitUnitType",
                  "kind": "optional",
                  "type": "string",
                  "description": "<p>Unit of time for the rolling occurrence window. Values for this field need to match datacodes setup with a CodeType of: TimePeriodUnitType.</p>",
                  "example": "Day"
                },
                {
                  "name": "timePeriodOccurrenceLimit",
                  "kind": "optional",
                  "type": "integer<int64>",
                  "description": "<p>Maximum number of times this bonus rule can fire within a single time-period window (defined by timePeriodOccurrenceLimitUnitType).</p>",
                  "example": 5,
                  "format": "int64"
                }
              ]
            },
            {
              "name": "invoicing",
              "kind": "optional",
              "type": "object",
              "description": "Billing configuration applied when the cost of this rule is charged back to an invoiced party.",
              "modelRef": "#/components/schemas/ProBonusInvoicing",
              "customType": "ProBonusInvoicing",
              "schema": [
                {
                  "name": "billable",
                  "kind": "optional",
                  "type": "boolean",
                  "description": "<p>When true, the cost of this rule is charged back to the invoiced party identified by billableToTypeCode.</p>"
                },
                {
                  "name": "billableToTypeCode",
                  "kind": "optional",
                  "type": "string",
                  "description": "<p>The party billed when billable is true. Values for this field need to match datacodes setup with a CodeType of: InvoiceTo. e.g. Hotel or Corporate.</p>",
                  "example": "Hotel"
                },
                {
                  "name": "invoiceTypeCode",
                  "kind": "optional",
                  "type": "string",
                  "description": "<p>Invoice classification applied when billableToTypeCode is Hotel. Values for this field need to match datacodes setup with a CodeType of: InvoiceType.</p>",
                  "example": "Standard"
                },
                {
                  "name": "invoiceAmount",
                  "kind": "optional",
                  "type": "number",
                  "description": "Fixed fee charged per occurrence when billable is true.",
                  "example": 25
                },
                {
                  "name": "invoiceRate",
                  "kind": "optional",
                  "type": "number",
                  "description": "<p>Rate-based fee charged per occurrence when billable is true. Client-specific — may not be available on all deployments.</p>",
                  "example": 0.15
                },
                {
                  "name": "ownerName",
                  "kind": "optional",
                  "type": "string",
                  "description": "Name of the owner responsible for this rule.",
                  "example": "Marketing Team"
                },
                {
                  "name": "taxable",
                  "kind": "optional",
                  "type": "boolean",
                  "description": "<p>When true, points awarded by this rule are treated as taxable income.</p>",
                  "example": false
                }
              ]
            },
            {
              "name": "results",
              "kind": "optional",
              "type": "object",
              "description": "<p>Reward outcomes applied when a bonus or promotion rule fires. Set only the fields relevant to the desired reward type(s).</p>",
              "modelRef": "#/components/schemas/ProBonusResults",
              "customType": "ProBonusResults",
              "schema": [
                {
                  "name": "pointCategoryCode",
                  "kind": "optional",
                  "type": "string",
                  "description": "<p>The point category bucket into which awarded points are deposited. Values for this field need to match datacodes setup with a CodeType of: PointCategory. e.g. Base or Bonus.</p>",
                  "example": "Base"
                },
                {
                  "name": "resultTypeCode",
                  "kind": "optional",
                  "type": "string",
                  "description": "<p>How the point award is calculated. Values for this field need to match datacodes setup with a CodeType of: ResultType. Fixed awards exactly resultAmount points; Percent awards resultAmount percent of the accrual points; Provided uses the amount supplied by the transaction.</p>",
                  "example": "Fixed"
                },
                {
                  "name": "resultAmount",
                  "kind": "optional",
                  "type": "number",
                  "description": "<p>Award magnitude interpreted according to resultTypeCode: the exact point count for Fixed, or the percentage multiplier for Percent. Not used when resultTypeCode is Provided.</p>",
                  "example": 500
                },
                {
                  "name": "resultSubTypeCode",
                  "kind": "optional",
                  "type": "string",
                  "description": "<p>Sub-classification of the point result type. Values for this field need to match datacodes setup with a CodeType of: ResultSubType. Applicable to bonus rules only; not used for promo rules.</p>",
                  "example": "Base"
                },
                {
                  "name": "tierQualifier",
                  "kind": "optional",
                  "type": "boolean",
                  "description": "<p>When true, the awarded points also count toward tier qualification.</p>",
                  "default": false
                },
                {
                  "name": "activityPointsMultiplier",
                  "kind": "optional",
                  "type": "number",
                  "description": "<p>Multiplier applied to a member activity counter to derive the point award. Mutually exclusive with resultTypeCode/resultAmount. Applicable to bonus rules only; not used for promo rules.</p>",
                  "example": 2.5
                },
                {
                  "name": "activityPointCategoryCode",
                  "kind": "optional",
                  "type": "string",
                  "description": "<p>Point category for activity-based awarded points. Values for this field need to match datacodes setup with a CodeType of: PointCategory. Required when activityPointsMultiplier is set. Applicable to bonus rules only; not used for promo rules.</p>",
                  "example": "Base"
                },
                {
                  "name": "activityCounterTypeCode",
                  "kind": "optional",
                  "type": "string",
                  "description": "<p>Counter type whose accumulated value is multiplied by activityPointsMultiplier. Values for this field need to match datacodes setup with a CodeType of: CounterType. Required when activityPointsMultiplier is set. Applicable to bonus rules only; not used for promo rules.</p>",
                  "example": "Nights"
                },
                {
                  "name": "activityTierQualifier",
                  "kind": "optional",
                  "type": "boolean",
                  "description": "<p>When true, points awarded via activityPointsMultiplier also count toward tier qualification. Applicable to bonus rules only; not used for promo rules.</p>",
                  "default": false
                },
                {
                  "name": "tierCode",
                  "kind": "optional",
                  "type": "string",
                  "description": "Tier to assign to the member when this rule fires.",
                  "example": "GOLD"
                },
                {
                  "name": "tierExpireDays",
                  "kind": "optional",
                  "type": "integer<int32>",
                  "description": "Number of days until the assigned tier expires. Used only for Trial tiers.",
                  "example": 90,
                  "format": "int32"
                },
                {
                  "name": "tierExpireDate",
                  "kind": "optional",
                  "type": "string<date>",
                  "description": "Exact expiration date for the assigned tier. Used only for Trial tiers.",
                  "example": "2026-12-31",
                  "format": "date"
                },
                {
                  "name": "tierPeriods",
                  "kind": "optional",
                  "type": "integer<int32>",
                  "description": "Number of qualification periods the assigned tier is valid for. Used only for Trial tiers.",
                  "example": 2,
                  "format": "int32"
                },
                {
                  "name": "futureTierCode",
                  "kind": "optional",
                  "type": "string",
                  "description": "Tier to assign to the member at the start of the next qualification period.",
                  "example": "PLATINUM"
                },
                {
                  "name": "futureTierExpireDays",
                  "kind": "optional",
                  "type": "integer<int32>",
                  "description": "Number of days until the future tier assignment expires. Used only for Trial tiers.",
                  "example": 90,
                  "format": "int32"
                },
                {
                  "name": "futureTierExpireDate",
                  "kind": "optional",
                  "type": "string<date>",
                  "description": "Exact expiration date for the future tier assignment. Used only for Trial tiers.",
                  "example": "2027-12-31",
                  "format": "date"
                },
                {
                  "name": "futureTierPeriods",
                  "kind": "optional",
                  "type": "integer<int32>",
                  "description": "Number of qualification periods the future tier is valid for. Used only for Trial tiers.",
                  "example": 2,
                  "format": "int32"
                },
                {
                  "name": "exactEndTierCode",
                  "kind": "optional",
                  "type": "string",
                  "description": "Tier whose end date is pinned to an exact date rather than derived from the qualification period.",
                  "example": "SILVER"
                },
                {
                  "name": "exactEndTierExpireDate",
                  "kind": "optional",
                  "type": "string<date>",
                  "description": "Exact date on which the tier assigned via exactEndTierCode expires.",
                  "example": "2026-06-30",
                  "format": "date"
                },
                {
                  "name": "couponAwardName",
                  "kind": "optional",
                  "type": "string",
                  "description": "Name of the coupon award template to issue when this rule fires.",
                  "example": "Welcome Award"
                },
                {
                  "name": "badgeName",
                  "kind": "optional",
                  "type": "string",
                  "description": "Name of the badge to award when this rule fires.",
                  "example": "Gold Status Badge"
                },
                {
                  "name": "promotionRuleCode",
                  "kind": "optional",
                  "type": "string",
                  "description": "Promotion rule to enroll the member in when this rule fires.",
                  "example": "PROMO-2026-SUMMER"
                },
                {
                  "name": "redemptionRuleCode",
                  "kind": "optional",
                  "type": "string",
                  "description": "Redemption rule to trigger when this rule fires.",
                  "example": "FREE-NIGHT"
                },
                {
                  "name": "redemptionQuantity",
                  "kind": "optional",
                  "type": "integer<int32>",
                  "description": "Number of redemptions to execute. Required when redemptionRuleCode is set.",
                  "example": 1,
                  "format": "int32"
                },
                {
                  "name": "communicationKey",
                  "kind": "optional",
                  "type": "string",
                  "description": "Item key of the communication template to send when this rule fires.",
                  "example": "ENROLL_WELCOME"
                },
                {
                  "name": "segmentCode",
                  "kind": "optional",
                  "type": "string",
                  "description": "Segment to add the member to when this rule fires.",
                  "example": "VIP-SEGMENT"
                },
                {
                  "name": "bonusRuleCode",
                  "kind": "optional",
                  "type": "string",
                  "description": "<p>Secondary bonus rule to trigger when this rule fires (chained bonus).</p>",
                  "example": "ENROLL-FOLLOW-UP"
                },
                {
                  "name": "cancellable",
                  "kind": "optional",
                  "type": "boolean",
                  "description": "<p>When true, the result of this rule can be cancelled retroactively. Applicable to bonus rules only; not used for promo rules.</p>",
                  "default": false
                },
                {
                  "name": "resultExternalCode",
                  "kind": "optional",
                  "type": "string",
                  "description": "<p>Code identifying the external fulfillment target for this rule result. Values must match datacodes configured client-side. Client-specific — may not be available on all deployments.</p>",
                  "example": "EXTERNAL_REWARD_CODE"
                },
                {
                  "name": "counters",
                  "kind": "optional",
                  "type": "array",
                  "description": "<p>Tier-qualifying activity counters to award when this rule fires.</p>",
                  "modelRef": "#/components/schemas/ProBonusResultCounter",
                  "customType": "ProBonusResultCounter[]",
                  "schema": [
                    {
                      "name": "counterType",
                      "kind": "optional",
                      "type": "string",
                      "description": "<p>The type of activity counter to award. Values for this field need to match datacodes setup with a CodeType of: CounterType. Determines which qualifying activity metric (e.g. Nights, Stays, Spend) is credited when the rule fires.</p>",
                      "example": "Nights"
                    },
                    {
                      "name": "counterValue",
                      "kind": "optional",
                      "type": "number",
                      "description": "<p>The number of counter units to award. Interpreted according to counterResultType — a fixed quantity, a percentage of the accrual's earned counter value, or the exact value provided by the transaction.</p>",
                      "example": 10
                    },
                    {
                      "name": "counterResultType",
                      "kind": "optional",
                      "type": "string",
                      "description": "<p>How counterValue is applied to determine the awarded counter amount. Values for this field need to match datacodes setup with a CodeType of: CounterResultType. Fixed awards the exact counterValue; Percent awards counterValue percent of the accrual counter; Provided awards the counter value supplied by the transaction.</p>",
                      "example": "Fixed"
                    }
                  ]
                }
              ]
            }
          ],
          "modelRef": "#/components/schemas/BonusRule",
          "isExpanded": true
        }
      ],
      "formDataParameters": [],
      "oAuthParameters": [
        {
          "id": "OAuth2",
          "name": "OAuth2",
          "kind": "optional",
          "type": "oauth2",
          "description": "<p>See <a href=\"https://docs.wearephaedon.com/docs/platform-api-authentication\" target=\"_blank\">https://docs.wearephaedon.com/docs/platform-api-authentication</a></p>",
          "oauth2Flows": {
            "clientCredentials": {
              "tokenUrl": "https://phaedon.oktapreview.com/oauth2/auscfbbmieFBGGOzR1d7/v1/token",
              "scopes": {
                "api:custom-data:read": "Grants read access to custom data information",
                "api:custom-data:modify": "Grants modify access to custom data information",
                "api:data-codes:read": "Grants read access to data codes",
                "api:data-codes:modify": "Grants modify access to data codes",
                "api:coupon-compensation:read": "Grants read access to compensations for coupon code",
                "api:coupon-compensation:create": "Grants access to create compensations for coupon code",
                "api:coupon-compensation:modify": "Grants access to edit compensation nights for coupon code",
                "api:coupon-request:modify": "Grants modify access to create coupons",
                "api:member:search": "Grants search access to member information",
                "api:member:verify": "Grants verify access to member information",
                "api:member:merge": "Grants access to merge members",
                "api:member:enroll": "Grants access to enroll members",
                "api:member:modify": "Grants modify access to member information",
                "api:member:read": "Grants read access to member information",
                "api:member:close": "Grants access to close member account",
                "api:member:migrate": "Grants access to migrate member accounts",
                "api:member-address:read": "Grants read access to member address information",
                "api:member-address:modify": "Grants modify access to member address information",
                "api:member-alias:read": "Grants read access to member alias information",
                "api:member-alias:modify": "Grants modify access to member alias information",
                "api:member-badge:read": "Grants read access to member badge information",
                "api:member-badge:modify": "Grants modify access to member badge information",
                "api:member-bonus:add": "Grants access to add a bonus to a member",
                "api:member-bonus:read": "Grants read access to member bonus information",
                "api:member-comments:read": "Grants read access to member comments information",
                "api:member-comments:modify": "Grants modify access to member comments information",
                "api:member-communication:read": "Grants read access to member communication information",
                "api:member-communication:modify": "Grants modify access to member communication information",
                "api:member-coupon:read": "Grants read access to member coupon information",
                "api:member-coupon-use:cancel": "Grants access to cancel member coupon uses",
                "api:member-coupon:transfer": "Grants access to transfer a member coupon",
                "api:member-coupon-use:update": "Grants access to update member coupon uses",
                "api:member-currency:read": "Grants read access to member currency information",
                "api:member-currency:adjust": "Grants access to adjust member currency",
                "api:member-currency:migrate": "Grants access to migrate member currency",
                "api:member-currency-conversion:convert": "Grants access to convert member currency",
                "api:member-email:read": "Grants read access to member email information",
                "api:member-email:modify": "Grants modify access to member email information",
                "api:member-event:read": "Grants read access to member events",
                "api:member-event:modify": "Grants modify access to member events",
                "api:event-rule:read": "Grants read access to event rules",
                "api:event-rule:modify": "Grants access to modify event rule",
                "api:event-rule:admin": "Grants full admin access to event rules",
                "api:member-list:read": "Grants read access to member list information",
                "api:member-list:modify": "Grants modify access to member list information",
                "api:member-partner-link:read": "Grants read access to member partner link information",
                "api:member-partner-link:modify": "Grants modify access to member partner link information",
                "api:member-payment-card:read": "Grants read access to member payment card information",
                "api:member-payment-card:modify": "Grants modify access to member payment card information",
                "api:member-phone:read": "Grants read access to member phone information",
                "api:member-phone:modify": "Grants modify access to member phone information",
                "api:member-preference:read": "Grants read access to member preference information",
                "api:member-preference:modify": "Grants modify access to member preference information",
                "api:member-promotion:read": "Grants read access to member promotion information",
                "api:member-promotion:register": "Grants access to register a member into a promotion",
                "api:member-redemption:create": "Grants redeem access to member redemption information",
                "api:member-redemption:over-redeem": "Grants access to over redeem",
                "api:member-redemption:read": "Grants read access to member redemption information",
                "api:member-redemption:cancel": "Grants access to cancel member redemptions",
                "api:member-redemption:migrate": "Allows migration of member redemption information",
                "api:member-redemption:patch": "Grants patching access to member redemption",
                "api:member-tier:read": "Grants read access to member tier information",
                "api:member-tier:adjust": "Grants access to adjust member tiers",
                "api:member-tier:migrate": "Grants access to migrate member tiers",
                "api:member-transaction:read": "Grants read access to transaction information",
                "api:member-transaction:cancel": "Grants access to cancel transactions",
                "api:member-transaction:clone": "Grants access to clone transactions",
                "api:member-transfer:transfer": "Grants access to do member to member transfers",
                "api:preference:read": "Grants read access to preference information",
                "api:promotion:read": "Grants read access to promotion information",
                "api:tier:read": "Grant read access to tier information",
                "api:promotion:register": "Grants access to register a member into a promotion using token",
                "api:promotion-token:manage": "Grants access to generate promotion token",
                "api:redemption:read": "Grants read access to redemption information",
                "api:redemption:modify": "Grants access to modify redemption information",
                "api:bonus-rule:read": "Grants read access to bonus rule configuration",
                "api:bonus-rule:modify": "Grants access to modify bonus rule configuration",
                "api:bonus-rule:manage": "Grants limited admin access to bonus rule configuration",
                "api:bonus-rule:admin": "Grants full admin access to bonus rules",
                "api:promotion-rule:read": "Grants read access to promotion rule configuration",
                "api:promotion-rule:modify": "Grants access to modify promotion rule configuration",
                "api:promotion-rule:manage": "Grants limited admin access to promotion rule configuration",
                "api:promotion-rule:admin": "Grants full admin access to promotion rules",
                "api:reports:under-investigation": "Grants access to under investigation report",
                "api:transaction:submit": "Grants access to submit transactions",
                "api:transaction:migrate": "Grants access to migrate transactions",
                "api:user:read": "Grants access to read user information",
                "api:user:modify": "Grants access to create user",
                "api:user-task:read": "Grants read access to user tasks",
                "api:user-task:modify": "Grants modify access to user tasks",
                "api:user-role:read": "Grants read access to user roles",
                "api:user-role:modify": "Grants modify access to user roles",
                "api:compensation:read": "Grants read access to hotel summary information",
                "api:compensation:modify": "Grants modify access to hotel summary information",
                "api:member-referral:read": "Grants read access to member referral information",
                "api:member-referral:modify": "Grants modify access to member referral information",
                "api:member-referral-codes:read": "Grants read access to member referral codes",
                "api:member-referral-codes:create": "Grants access to create member referral codes",
                "api:outbound-notification:modify": "Grants access to send outbound notification",
                "api:outbound-notification:read": "Grants access to read outbound notification types",
                "api:background-task:read": "Grants read access to background task information",
                "api:async-task:create": "Grants access to submit operations for background processing",
                "api:async-task:read": "Grants read access to background processing results",
                "api:audit-configuration:read": "Grants read access to audit configuration information",
                "api:audit-configuration:modify": "Grants modify access to audit configuration information",
                "api:badge:read": "Grant read access to badge information",
                "api:broadcast-messages:read": "Grant Read access to broadcast messages",
                "api:expression-config:read": "Grant read access to expression builder configuration",
                "api:managed-entity:read": "Grant read access to managed entity data",
                "api:customer-satisfaction:modify": "Grants modify access to customer satisfaction metrics",
                "api:member-linked-account:modify": "Grant modify access to member linked account",
                "api:member-linked-account:read": "Grants access to read linked member accounts",
                "api:enroll-codes:read": "Grants access to read enroll codes",
                "api:contact-us:modify": "Grants access to submit Contact Us inquiry",
                "api:data-release:read": "Grants read access to data releases",
                "api:points-pool:read": "Grants read access to points pools",
                "api:points-pool:modify": "Grants modify access to points pools",
                "api:segment:read": "Grants read access to segments",
                "api:segment:modify": "Grants modify access to segments",
                "api:communication-type:read": "Grants read access to communication types",
                "api:communication-type:modify": "Grants modify access to communication types",
                "api:member-status-match:read": "Grants read access to status match eligibility and submitted images/applications",
                "api:member-status-match:create": "Grants access to upload status match images and submit applications"
              }
            }
          },
          "requiredScopes": [
            "api:bonus-rule:manage"
          ]
        }
      ],
      "cookieParameters": []
    },
    "responses": [
      {
        "statusCode": "200",
        "description": "Success",
        "jsonExample": "",
        "isExpanded": true,
        "schema": [
          {
            "kind": "optional",
            "type": "object",
            "description": "",
            "customType": "BonusRule",
            "schema": [
              {
                "name": "code",
                "kind": "optional",
                "type": "string",
                "description": "<p>Unique code for the bonus rule (bonusId)</p>",
                "example": "ENROLLMENT_BONUS_2026",
                "minLength": 1,
                "maxLength": 100
              },
              {
                "name": "externalCode",
                "kind": "optional",
                "type": "string",
                "description": "<p>Optional cross-system reference code used when this rule originates from or must reconcile with an external platform.</p>",
                "example": "EXT-12345",
                "maxLength": 100
              },
              {
                "name": "name",
                "kind": "optional",
                "type": "string",
                "description": "<p>Human-readable label for this rule shown in the admin UI.</p>",
                "example": "Enrollment Bonus 2026",
                "minLength": 1,
                "maxLength": 300
              },
              {
                "name": "typeCode",
                "kind": "optional",
                "type": "string",
                "description": "<p>Categorises the triggering event for this rule. Values for this field need to match datacodes setup with a CodeType of: BonusType. e.g. Enrollment, Stay, or Manual.</p>",
                "example": "Enrollment"
              },
              {
                "name": "enrollmentCode",
                "kind": "optional",
                "type": "string",
                "description": "Enrollment tracking code associated with this rule. Only applicable when typeCode is Enrollment.",
                "example": "ENROLL-2026-Q1"
              },
              {
                "name": "statusCode",
                "kind": "optional",
                "type": "string",
                "description": "<p>Lifecycle status of the rule. Values for this field need to match datacodes setup with a CodeType of: ProBonusStatus. Active (A) rules are eligible to fire during processing; Inactive (I) rules are skipped.</p>",
                "example": "A"
              },
              {
                "name": "startDate",
                "kind": "optional",
                "type": "string<date>",
                "description": "First date on which qualifying transactions can trigger this rule.",
                "example": "2026-01-01",
                "format": "date"
              },
              {
                "name": "endDate",
                "kind": "optional",
                "type": "string<date>",
                "description": "Last date on which qualifying transactions can trigger this rule. Omit or set to null for no expiry.",
                "example": "2026-12-31",
                "format": "date"
              },
              {
                "name": "campaignName",
                "kind": "optional",
                "type": "string",
                "description": "Name of the campaign this rule is grouped under.",
                "example": "Q1 2026 Enrollment Campaign"
              },
              {
                "name": "manuallyProcessed",
                "kind": "optional",
                "type": "boolean",
                "description": "<p>When true, the rule is excluded from automated accrual processing and must be triggered explicitly by operations staff.</p>",
                "example": false
              },
              {
                "name": "displayOnline",
                "kind": "optional",
                "type": "boolean",
                "description": "<p>Controls whether this bonus is surfaced on member-facing online channels.</p>",
                "example": true
              },
              {
                "name": "displayOnlineUntilDate",
                "kind": "optional",
                "type": "string<date>",
                "description": "<p>Date after which this rule is no longer surfaced on member-facing online channels. Only evaluated when displayOnline is true.</p>",
                "example": "2026-12-31",
                "format": "date"
              },
              {
                "name": "minUserRoleCode",
                "kind": "optional",
                "type": "string",
                "description": "Name of the minimum user role required to view or interact with this rule in the admin UI.",
                "example": "Admin"
              },
              {
                "name": "contentKey",
                "kind": "optional",
                "type": "string",
                "description": "Identifier used to associate this rule with localised content.",
                "example": "promo-summer-2026"
              },
              {
                "name": "clientTag",
                "kind": "optional",
                "type": "string",
                "description": "<p>Client-defined tag code applied to this rule. Values for this field need to match datacodes setup with a CodeType of: BonusClientTag. Requires feature flag bonuses-client-tag to be enabled.</p>",
                "example": "VIP"
              },
              {
                "name": "workflowStatus",
                "kind": "optional",
                "type": "string",
                "description": "<p>Editorial state of the rule. Values for this field need to match datacodes setup with a CodeType of: RuleWorkflowStatus. WORKING indicates the rule is still being configured; READY indicates it has been approved for deployment.</p>",
                "example": "WORKING"
              },
              {
                "name": "rawExpression",
                "kind": "optional",
                "type": "string",
                "description": "Boolean eligibility expression evaluated against member and accrual context."
              },
              {
                "name": "dataReleaseName",
                "kind": "optional",
                "type": "string",
                "description": "<p>Name of the data release bundle this rule is assigned to. Pass a name to assign the rule to an existing release; omit or set to null to leave unassigned.</p>",
                "example": "Rules Release 2025",
                "maxLength": 250
              },
              {
                "name": "dataReleaseItemStatus",
                "kind": "optional",
                "type": "string",
                "readOnly": true,
                "description": "<p>Deployment status of this rule within its data release. Values for this field match datacodes setup with a CodeType of: DataReleaseItemStatus. e.g. LIVE or PENDING.</p>",
                "example": "LIVE",
                "maxLength": 50
              },
              {
                "name": "comments",
                "kind": "optional",
                "type": "string",
                "description": "<p>Free-text notes for this rule visible to admin users. Client-specific — may not be available on all deployments.</p>",
                "example": "Created for Q1 campaign",
                "maxLength": 200
              },
              {
                "name": "limits",
                "kind": "optional",
                "type": "object",
                "description": "Cap configuration controlling how many times and how many points a bonus rule can award.",
                "modelRef": "#/components/schemas/BonusRuleLimits",
                "customType": "BonusRuleLimits",
                "schema": [
                  {
                    "name": "occurrenceLimit",
                    "kind": "optional",
                    "type": "integer<int64>",
                    "description": "Maximum number of times this bonus rule can fire for a single member over its lifetime. Omit or set to null for unlimited firings.",
                    "example": 3,
                    "format": "int64"
                  },
                  {
                    "name": "pointInstanceLimit",
                    "kind": "optional",
                    "type": "number",
                    "description": "<p>Maximum points a member can earn from a single firing of this bonus rule. Acts as a per-trigger cap on the calculated award.</p>",
                    "example": 1000
                  },
                  {
                    "name": "pointMinInstanceLimit",
                    "kind": "optional",
                    "type": "integer<int32>",
                    "description": "Minimum point threshold per transaction instance required for this bonus rule to fire.",
                    "example": -5,
                    "format": "int32"
                  },
                  {
                    "name": "pointLimit",
                    "kind": "optional",
                    "type": "number",
                    "description": "Cumulative point cap per member across all firings of this bonus rule. The rule stops awarding once a member reaches this total.",
                    "example": 5000
                  },
                  {
                    "name": "graceLimit",
                    "kind": "optional",
                    "type": "integer<int32>",
                    "description": "<p>Number of days after endDate during which late-arriving transactions are still eligible to trigger this bonus rule.</p>",
                    "example": 30,
                    "format": "int32"
                  },
                  {
                    "name": "timePeriodOccurrenceLimitUnitType",
                    "kind": "optional",
                    "type": "string",
                    "description": "<p>Unit of time for the rolling occurrence window. Values for this field need to match datacodes setup with a CodeType of: TimePeriodUnitType.</p>",
                    "example": "Day"
                  },
                  {
                    "name": "timePeriodOccurrenceLimit",
                    "kind": "optional",
                    "type": "integer<int64>",
                    "description": "<p>Maximum number of times this bonus rule can fire within a single time-period window (defined by timePeriodOccurrenceLimitUnitType).</p>",
                    "example": 5,
                    "format": "int64"
                  }
                ]
              },
              {
                "name": "invoicing",
                "kind": "optional",
                "type": "object",
                "description": "Billing configuration applied when the cost of this rule is charged back to an invoiced party.",
                "modelRef": "#/components/schemas/ProBonusInvoicing",
                "customType": "ProBonusInvoicing",
                "schema": [
                  {
                    "name": "billable",
                    "kind": "optional",
                    "type": "boolean",
                    "description": "<p>When true, the cost of this rule is charged back to the invoiced party identified by billableToTypeCode.</p>"
                  },
                  {
                    "name": "billableToTypeCode",
                    "kind": "optional",
                    "type": "string",
                    "description": "<p>The party billed when billable is true. Values for this field need to match datacodes setup with a CodeType of: InvoiceTo. e.g. Hotel or Corporate.</p>",
                    "example": "Hotel"
                  },
                  {
                    "name": "invoiceTypeCode",
                    "kind": "optional",
                    "type": "string",
                    "description": "<p>Invoice classification applied when billableToTypeCode is Hotel. Values for this field need to match datacodes setup with a CodeType of: InvoiceType.</p>",
                    "example": "Standard"
                  },
                  {
                    "name": "invoiceAmount",
                    "kind": "optional",
                    "type": "number",
                    "description": "Fixed fee charged per occurrence when billable is true.",
                    "example": 25
                  },
                  {
                    "name": "invoiceRate",
                    "kind": "optional",
                    "type": "number",
                    "description": "<p>Rate-based fee charged per occurrence when billable is true. Client-specific — may not be available on all deployments.</p>",
                    "example": 0.15
                  },
                  {
                    "name": "ownerName",
                    "kind": "optional",
                    "type": "string",
                    "description": "Name of the owner responsible for this rule.",
                    "example": "Marketing Team"
                  },
                  {
                    "name": "taxable",
                    "kind": "optional",
                    "type": "boolean",
                    "description": "<p>When true, points awarded by this rule are treated as taxable income.</p>",
                    "example": false
                  }
                ]
              },
              {
                "name": "results",
                "kind": "optional",
                "type": "object",
                "description": "<p>Reward outcomes applied when a bonus or promotion rule fires. Set only the fields relevant to the desired reward type(s).</p>",
                "modelRef": "#/components/schemas/ProBonusResults",
                "customType": "ProBonusResults",
                "schema": [
                  {
                    "name": "pointCategoryCode",
                    "kind": "optional",
                    "type": "string",
                    "description": "<p>The point category bucket into which awarded points are deposited. Values for this field need to match datacodes setup with a CodeType of: PointCategory. e.g. Base or Bonus.</p>",
                    "example": "Base"
                  },
                  {
                    "name": "resultTypeCode",
                    "kind": "optional",
                    "type": "string",
                    "description": "<p>How the point award is calculated. Values for this field need to match datacodes setup with a CodeType of: ResultType. Fixed awards exactly resultAmount points; Percent awards resultAmount percent of the accrual points; Provided uses the amount supplied by the transaction.</p>",
                    "example": "Fixed"
                  },
                  {
                    "name": "resultAmount",
                    "kind": "optional",
                    "type": "number",
                    "description": "<p>Award magnitude interpreted according to resultTypeCode: the exact point count for Fixed, or the percentage multiplier for Percent. Not used when resultTypeCode is Provided.</p>",
                    "example": 500
                  },
                  {
                    "name": "resultSubTypeCode",
                    "kind": "optional",
                    "type": "string",
                    "description": "<p>Sub-classification of the point result type. Values for this field need to match datacodes setup with a CodeType of: ResultSubType. Applicable to bonus rules only; not used for promo rules.</p>",
                    "example": "Base"
                  },
                  {
                    "name": "tierQualifier",
                    "kind": "optional",
                    "type": "boolean",
                    "description": "<p>When true, the awarded points also count toward tier qualification.</p>",
                    "default": false
                  },
                  {
                    "name": "activityPointsMultiplier",
                    "kind": "optional",
                    "type": "number",
                    "description": "<p>Multiplier applied to a member activity counter to derive the point award. Mutually exclusive with resultTypeCode/resultAmount. Applicable to bonus rules only; not used for promo rules.</p>",
                    "example": 2.5
                  },
                  {
                    "name": "activityPointCategoryCode",
                    "kind": "optional",
                    "type": "string",
                    "description": "<p>Point category for activity-based awarded points. Values for this field need to match datacodes setup with a CodeType of: PointCategory. Required when activityPointsMultiplier is set. Applicable to bonus rules only; not used for promo rules.</p>",
                    "example": "Base"
                  },
                  {
                    "name": "activityCounterTypeCode",
                    "kind": "optional",
                    "type": "string",
                    "description": "<p>Counter type whose accumulated value is multiplied by activityPointsMultiplier. Values for this field need to match datacodes setup with a CodeType of: CounterType. Required when activityPointsMultiplier is set. Applicable to bonus rules only; not used for promo rules.</p>",
                    "example": "Nights"
                  },
                  {
                    "name": "activityTierQualifier",
                    "kind": "optional",
                    "type": "boolean",
                    "description": "<p>When true, points awarded via activityPointsMultiplier also count toward tier qualification. Applicable to bonus rules only; not used for promo rules.</p>",
                    "default": false
                  },
                  {
                    "name": "tierCode",
                    "kind": "optional",
                    "type": "string",
                    "description": "Tier to assign to the member when this rule fires.",
                    "example": "GOLD"
                  },
                  {
                    "name": "tierExpireDays",
                    "kind": "optional",
                    "type": "integer<int32>",
                    "description": "Number of days until the assigned tier expires. Used only for Trial tiers.",
                    "example": 90,
                    "format": "int32"
                  },
                  {
                    "name": "tierExpireDate",
                    "kind": "optional",
                    "type": "string<date>",
                    "description": "Exact expiration date for the assigned tier. Used only for Trial tiers.",
                    "example": "2026-12-31",
                    "format": "date"
                  },
                  {
                    "name": "tierPeriods",
                    "kind": "optional",
                    "type": "integer<int32>",
                    "description": "Number of qualification periods the assigned tier is valid for. Used only for Trial tiers.",
                    "example": 2,
                    "format": "int32"
                  },
                  {
                    "name": "futureTierCode",
                    "kind": "optional",
                    "type": "string",
                    "description": "Tier to assign to the member at the start of the next qualification period.",
                    "example": "PLATINUM"
                  },
                  {
                    "name": "futureTierExpireDays",
                    "kind": "optional",
                    "type": "integer<int32>",
                    "description": "Number of days until the future tier assignment expires. Used only for Trial tiers.",
                    "example": 90,
                    "format": "int32"
                  },
                  {
                    "name": "futureTierExpireDate",
                    "kind": "optional",
                    "type": "string<date>",
                    "description": "Exact expiration date for the future tier assignment. Used only for Trial tiers.",
                    "example": "2027-12-31",
                    "format": "date"
                  },
                  {
                    "name": "futureTierPeriods",
                    "kind": "optional",
                    "type": "integer<int32>",
                    "description": "Number of qualification periods the future tier is valid for. Used only for Trial tiers.",
                    "example": 2,
                    "format": "int32"
                  },
                  {
                    "name": "exactEndTierCode",
                    "kind": "optional",
                    "type": "string",
                    "description": "Tier whose end date is pinned to an exact date rather than derived from the qualification period.",
                    "example": "SILVER"
                  },
                  {
                    "name": "exactEndTierExpireDate",
                    "kind": "optional",
                    "type": "string<date>",
                    "description": "Exact date on which the tier assigned via exactEndTierCode expires.",
                    "example": "2026-06-30",
                    "format": "date"
                  },
                  {
                    "name": "couponAwardName",
                    "kind": "optional",
                    "type": "string",
                    "description": "Name of the coupon award template to issue when this rule fires.",
                    "example": "Welcome Award"
                  },
                  {
                    "name": "badgeName",
                    "kind": "optional",
                    "type": "string",
                    "description": "Name of the badge to award when this rule fires.",
                    "example": "Gold Status Badge"
                  },
                  {
                    "name": "promotionRuleCode",
                    "kind": "optional",
                    "type": "string",
                    "description": "Promotion rule to enroll the member in when this rule fires.",
                    "example": "PROMO-2026-SUMMER"
                  },
                  {
                    "name": "redemptionRuleCode",
                    "kind": "optional",
                    "type": "string",
                    "description": "Redemption rule to trigger when this rule fires.",
                    "example": "FREE-NIGHT"
                  },
                  {
                    "name": "redemptionQuantity",
                    "kind": "optional",
                    "type": "integer<int32>",
                    "description": "Number of redemptions to execute. Required when redemptionRuleCode is set.",
                    "example": 1,
                    "format": "int32"
                  },
                  {
                    "name": "communicationKey",
                    "kind": "optional",
                    "type": "string",
                    "description": "Item key of the communication template to send when this rule fires.",
                    "example": "ENROLL_WELCOME"
                  },
                  {
                    "name": "segmentCode",
                    "kind": "optional",
                    "type": "string",
                    "description": "Segment to add the member to when this rule fires.",
                    "example": "VIP-SEGMENT"
                  },
                  {
                    "name": "bonusRuleCode",
                    "kind": "optional",
                    "type": "string",
                    "description": "<p>Secondary bonus rule to trigger when this rule fires (chained bonus).</p>",
                    "example": "ENROLL-FOLLOW-UP"
                  },
                  {
                    "name": "cancellable",
                    "kind": "optional",
                    "type": "boolean",
                    "description": "<p>When true, the result of this rule can be cancelled retroactively. Applicable to bonus rules only; not used for promo rules.</p>",
                    "default": false
                  },
                  {
                    "name": "resultExternalCode",
                    "kind": "optional",
                    "type": "string",
                    "description": "<p>Code identifying the external fulfillment target for this rule result. Values must match datacodes configured client-side. Client-specific — may not be available on all deployments.</p>",
                    "example": "EXTERNAL_REWARD_CODE"
                  },
                  {
                    "name": "counters",
                    "kind": "optional",
                    "type": "array",
                    "description": "<p>Tier-qualifying activity counters to award when this rule fires.</p>",
                    "modelRef": "#/components/schemas/ProBonusResultCounter",
                    "customType": "ProBonusResultCounter[]",
                    "schema": [
                      {
                        "name": "counterType",
                        "kind": "optional",
                        "type": "string",
                        "description": "<p>The type of activity counter to award. Values for this field need to match datacodes setup with a CodeType of: CounterType. Determines which qualifying activity metric (e.g. Nights, Stays, Spend) is credited when the rule fires.</p>",
                        "example": "Nights"
                      },
                      {
                        "name": "counterValue",
                        "kind": "optional",
                        "type": "number",
                        "description": "<p>The number of counter units to award. Interpreted according to counterResultType — a fixed quantity, a percentage of the accrual's earned counter value, or the exact value provided by the transaction.</p>",
                        "example": 10
                      },
                      {
                        "name": "counterResultType",
                        "kind": "optional",
                        "type": "string",
                        "description": "<p>How counterValue is applied to determine the awarded counter amount. Values for this field need to match datacodes setup with a CodeType of: CounterResultType. Fixed awards the exact counterValue; Percent awards counterValue percent of the accrual counter; Provided awards the counter value supplied by the transaction.</p>",
                        "example": "Fixed"
                      }
                    ]
                  }
                ]
              }
            ],
            "modelRef": "#/components/schemas/BonusRule",
            "isExpanded": true
          }
        ]
      },
      {
        "statusCode": "400",
        "description": "Bad request",
        "jsonExample": "",
        "isExpanded": true,
        "schema": [
          {
            "kind": "optional",
            "type": "object",
            "description": "",
            "customType": "ErrorResponse",
            "schema": [
              {
                "name": "errors",
                "kind": "optional",
                "type": "array",
                "description": "List of errors",
                "modelRef": "#/components/schemas/ValidationError",
                "customType": "ValidationError[]",
                "schema": [
                  {
                    "name": "code",
                    "kind": "optional",
                    "type": "string",
                    "description": "Error code assigned to this violation"
                  },
                  {
                    "name": "fieldName",
                    "kind": "optional",
                    "type": "string",
                    "description": "<p>Name of field that violated validation constraint (optional)</p>"
                  },
                  {
                    "name": "message",
                    "kind": "optional",
                    "type": "string",
                    "description": "Internal message describing the error"
                  },
                  {
                    "name": "messageParameters",
                    "kind": "optional",
                    "type": "array",
                    "description": "Error message parameters",
                    "example": "",
                    "itemType": "object",
                    "customType": "object[]",
                    "schema": []
                  }
                ]
              }
            ],
            "modelRef": "#/components/schemas/ErrorResponse",
            "isExpanded": true
          }
        ]
      },
      {
        "statusCode": "401",
        "description": "Unauthorized",
        "jsonExample": "",
        "isExpanded": true
      },
      {
        "statusCode": "403",
        "description": "Forbidden",
        "jsonExample": "",
        "isExpanded": true
      },
      {
        "statusCode": "404",
        "description": "Not found",
        "jsonExample": "",
        "isExpanded": true
      },
      {
        "statusCode": "500",
        "description": "Internal error",
        "jsonExample": "",
        "isExpanded": true
      }
    ],
    "hasXCodeSamples": false,
    "examples": {
      "languages": [
        {
          "id": "loa9svIFyNY6Q8GNuCay3",
          "language": "curl",
          "label": "cURL",
          "code": "curl --request PATCH \\\n     --url https://api.b.preview.loyaltyservices.io/api/v3/bonus-rules/{code} \\\n     --header 'accept: application/json'"
        },
        {
          "id": "2JDEDvY4GNib9BVKhE9D4",
          "language": "ruby",
          "label": "Ruby",
          "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.b.preview.loyaltyservices.io/api/v3/bonus-rules/{code}\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Patch.new(url)\nrequest[\"accept\"] = \"application/json\"\nrequest[\"content-type\"] = \"application/json\"\n\nresponse = https.request(request)\nputs response.read_body\n"
        },
        {
          "id": "ifHr8D-jGoU_cLuhAbyr1",
          "language": "python",
          "label": "Python",
          "code": "import requests\nimport json\n\nurl = \"https://api.b.preview.loyaltyservices.io/api/v3/bonus-rules/{code}\"\n\npayload = {}\nheaders = {\n   'accept': 'application/json',\n   'content-type': 'application/json'\n}\n\nresponse = requests.request(\"PATCH\", url, headers=headers, data=payload)\n\nprint(response.text)\n"
        },
        {
          "id": "hQ2Wcztav7rl4Fh2ONjhi",
          "language": "java",
          "label": "Java",
          "code": "OkHttpClient client = new OkHttpClient().newBuilder()\n   .build();\nMediaType mediaType = MediaType.parse(\"application/json\");\nRequestBody body = RequestBody.create(mediaType, \"\");\nRequest request = new Request.Builder()\n   .url(\"https://api.b.preview.loyaltyservices.io/api/v3/bonus-rules/{code}\")\n   .method(\"PATCH\", body)\n   .addHeader(\"accept\", \"application/json\")\n   .addHeader(\"content-type\", \"application/json\")\n   .build();\nResponse response = client.newCall(request).execute();"
        }
      ],
      "selectedLanguageId": "loa9svIFyNY6Q8GNuCay3"
    },
    "results": {
      "languages": [
        {
          "id": "eyi8IA1-N90zeHD8TehKM",
          "language": "200",
          "code": "// Success\n{\n  \"code\": \"ENROLLMENT_BONUS_2026\",\n  \"externalCode\": \"EXT-12345\",\n  \"name\": \"Enrollment Bonus 2026\",\n  \"typeCode\": \"Enrollment\",\n  \"enrollmentCode\": \"ENROLL-2026-Q1\",\n  \"statusCode\": \"A\",\n  \"startDate\": \"2026-01-01\",\n  \"endDate\": \"2026-12-31\",\n  \"campaignName\": \"Q1 2026 Enrollment Campaign\",\n  \"manuallyProcessed\": false,\n  \"displayOnline\": true,\n  \"displayOnlineUntilDate\": \"2026-12-31\",\n  \"minUserRoleCode\": \"Admin\",\n  \"contentKey\": \"promo-summer-2026\",\n  \"clientTag\": \"VIP\",\n  \"workflowStatus\": \"WORKING\",\n  \"rawExpression\": \"\",\n  \"dataReleaseName\": \"Rules Release 2025\",\n  \"dataReleaseItemStatus\": \"LIVE\",\n  \"comments\": \"Created for Q1 campaign\",\n  \"limits\": {\n    \"occurrenceLimit\": 3,\n    \"pointInstanceLimit\": 1000,\n    \"pointMinInstanceLimit\": -5,\n    \"pointLimit\": 5000,\n    \"graceLimit\": 30,\n    \"timePeriodOccurrenceLimitUnitType\": \"Day\",\n    \"timePeriodOccurrenceLimit\": 5\n  },\n  \"invoicing\": {\n    \"billable\": false,\n    \"billableToTypeCode\": \"Hotel\",\n    \"invoiceTypeCode\": \"Standard\",\n    \"invoiceAmount\": 25,\n    \"invoiceRate\": 0.15,\n    \"ownerName\": \"Marketing Team\",\n    \"taxable\": false\n  },\n  \"results\": {\n    \"pointCategoryCode\": \"Base\",\n    \"resultTypeCode\": \"Fixed\",\n    \"resultAmount\": 500,\n    \"resultSubTypeCode\": \"Base\",\n    \"tierQualifier\": false,\n    \"activityPointsMultiplier\": 2.5,\n    \"activityPointCategoryCode\": \"Base\",\n    \"activityCounterTypeCode\": \"Nights\",\n    \"activityTierQualifier\": false,\n    \"tierCode\": \"GOLD\",\n    \"tierExpireDays\": 90,\n    \"tierExpireDate\": \"2026-12-31\",\n    \"tierPeriods\": 2,\n    \"futureTierCode\": \"PLATINUM\",\n    \"futureTierExpireDays\": 90,\n    \"futureTierExpireDate\": \"2027-12-31\",\n    \"futureTierPeriods\": 2,\n    \"exactEndTierCode\": \"SILVER\",\n    \"exactEndTierExpireDate\": \"2026-06-30\",\n    \"couponAwardName\": \"Welcome Award\",\n    \"badgeName\": \"Gold Status Badge\",\n    \"promotionRuleCode\": \"PROMO-2026-SUMMER\",\n    \"redemptionRuleCode\": \"FREE-NIGHT\",\n    \"redemptionQuantity\": 1,\n    \"communicationKey\": \"ENROLL_WELCOME\",\n    \"segmentCode\": \"VIP-SEGMENT\",\n    \"bonusRuleCode\": \"ENROLL-FOLLOW-UP\",\n    \"cancellable\": false,\n    \"resultExternalCode\": \"EXTERNAL_REWARD_CODE\",\n    \"counters\": [\n      {\n        \"counterType\": \"Nights\",\n        \"counterValue\": 10,\n        \"counterResultType\": \"Fixed\"\n      }\n    ]\n  }\n}"
        },
        {
          "id": "ZS4fbWkaVv4l5Tvhbx047",
          "language": "400",
          "code": "// Bad request\n{\n  \"errors\": [\n    {\n      \"code\": \"\",\n      \"fieldName\": \"\",\n      \"message\": \"\",\n      \"messageParameters\": [\n        {}\n      ]\n    }\n  ]\n}"
        },
        {
          "id": "Hmc-9QQLcmd-SVQnrO7xR",
          "language": "401",
          "code": "// Unauthorized\n"
        },
        {
          "id": "85q7PZhBa_MFhg0s876mG",
          "language": "403",
          "code": "// Forbidden\n"
        },
        {
          "id": "O5RD6Hie4Y20p_FTBv55V",
          "language": "404",
          "code": "// Not found\n"
        },
        {
          "id": "v1wGYFCUvYonL4sspG6QD",
          "language": "500",
          "code": "// Internal error\n"
        }
      ],
      "selectedLanguageId": "eyi8IA1-N90zeHD8TehKM"
    }
  },
  "children": [
    {
      "text": ""
    }
  ]
}