---
title: "Changes to Create earning rule"
method: POST
path: "/v2/loyalties/earning-rules"
---

# Changes to Create earning rule

`POST /v2/loyalties/earning-rules`

> Every recorded change to this endpoint, newest first.

## Timeline

Changed in 6 of 76 revisions.

- **2026-07-31** (v2) `703a0a42ea43` — 5 breaking, 4 warning, 9 info
- **2026-07-17** (v2) `4cbaee5a82d5` — 8 info
- **2026-07-17** (v2) `26ef7b3dd1ef` — 4 breaking, 4 warning, 8 info
- **2026-07-06** (v2) `341403eb19e5` — 45 breaking, 10 warning, 48 info
- **2026-05-26** (v2) `bf7c81751b90` — 1 breaking, 2 info
- **2026-05-25** (v2) `26ca0378df82` — 1 breaking, 1 info

## Changes

- **2026-07-31** (v2) `703a0a42ea43` — 5 breaking, 4 warning, 9 info
  - added `subschema #2, subschema #3` to the `earnings/items/effects/items/` request property `allOf` list
  - added `subschema #2, subschema #3` to the `trigger_limits/oneOf[#/components/schemas/EarningRuleTriggerLimits]/frequency/oneOf[#/components/schemas/EarningRuleTriggerLimitsFrequency]/` request property `allOf` list
  - added `subschema #3, subschema #5` to the `earnings/items/effects/items/points/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` request property `allOf` list
  - added `subschema #3, subschema #5` to the `earnings/items/effects/items/points_proportional/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` request property `allOf` list
  - removed `#/components/schemas/EarningRuleMetadata` from the `metadata` request property `oneOf` list
  - removed `subschema #2, subschema #3` from the `earnings/items/effects/items/` request property `allOf` list
  - removed `subschema #2, subschema #3` from the `trigger_limits/oneOf[#/components/schemas/EarningRuleTriggerLimits]/frequency/oneOf[#/components/schemas/EarningRuleTriggerLimitsFrequency]/` request property `allOf` list
  - removed `subschema #3, subschema #5` from the `earnings/items/effects/items/points/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` request property `allOf` list
  - removed `subschema #3, subschema #5` from the `earnings/items/effects/items/points_proportional/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` request property `allOf` list
  - added `#/components/schemas/Metadata` to the `metadata` request property `oneOf` list
  - added `subschema #2, subschema #3` to the `earnings/items/effects/items/` response property `allOf` list for the response status `200`
  - added `subschema #2, subschema #3` to the `trigger_limits/oneOf[#/components/schemas/EarningRuleTriggerLimits]/frequency/oneOf[#/components/schemas/EarningRuleTriggerLimitsFrequency]/` response property `allOf` list for the response status `200`
  - added `subschema #3, subschema #5` to the `earnings/items/effects/items/points/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` response property `allOf` list for the response status `200`
  - added `subschema #3, subschema #5` to the `earnings/items/effects/items/points_proportional/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` response property `allOf` list for the response status `200`
  - removed `subschema #2, subschema #3` from the `earnings/items/effects/items/` response property `allOf` list for the response status `200`
  - removed `subschema #2, subschema #3` from the `trigger_limits/oneOf[#/components/schemas/EarningRuleTriggerLimits]/frequency/oneOf[#/components/schemas/EarningRuleTriggerLimitsFrequency]/` response property `allOf` list for the response status `200`
  - removed `subschema #3, subschema #5` from the `earnings/items/effects/items/points/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` response property `allOf` list for the response status `200`
  - removed `subschema #3, subschema #5` from the `earnings/items/effects/items/points_proportional/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` response property `allOf` list for the response status `200`
- **2026-07-17** (v2) `4cbaee5a82d5` — 8 info
  - added the optional property `resource_id` to the response with the `400` status
  - added the optional property `resource_id` to the response with the `404` status
  - added the optional property `resource_id` to the response with the `409` status
  - added the optional property `resource_id` to the response with the `500` status
  - added the optional property `resource_type` to the response with the `400` status
  - added the optional property `resource_type` to the response with the `404` status
  - added the optional property `resource_type` to the response with the `409` status
  - added the optional property `resource_type` to the response with the `500` status
- **2026-07-17** (v2) `26ef7b3dd1ef` — 4 breaking, 4 warning, 8 info
  - added `subschema #2, subschema #3` to the `earnings/items/effects/items/` request property `allOf` list
  - added `subschema #2, subschema #3` to the `trigger_limits/oneOf[#/components/schemas/EarningRuleTriggerLimits]/frequency/oneOf[#/components/schemas/EarningRuleTriggerLimitsFrequency]/` request property `allOf` list
  - added `subschema #3, subschema #4, subschema #5` to the `earnings/items/effects/items/points/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` request property `allOf` list
  - added `subschema #3, subschema #4, subschema #5` to the `earnings/items/effects/items/points_proportional/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` request property `allOf` list
  - removed `subschema #2, subschema #3` from the `earnings/items/effects/items/` request property `allOf` list
  - removed `subschema #2, subschema #3` from the `trigger_limits/oneOf[#/components/schemas/EarningRuleTriggerLimits]/frequency/oneOf[#/components/schemas/EarningRuleTriggerLimitsFrequency]/` request property `allOf` list
  - removed `subschema #3, subschema #4, subschema #5` from the `earnings/items/effects/items/points/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` request property `allOf` list
  - removed `subschema #3, subschema #4, subschema #5` from the `earnings/items/effects/items/points_proportional/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` request property `allOf` list
  - added `subschema #2, subschema #3` to the `earnings/items/effects/items/` response property `allOf` list for the response status `200`
  - added `subschema #2, subschema #3` to the `trigger_limits/oneOf[#/components/schemas/EarningRuleTriggerLimits]/frequency/oneOf[#/components/schemas/EarningRuleTriggerLimitsFrequency]/` response property `allOf` list for the response status `200`
  - added `subschema #3, subschema #4, subschema #5` to the `earnings/items/effects/items/points/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` response property `allOf` list for the response status `200`
  - added `subschema #3, subschema #4, subschema #5` to the `earnings/items/effects/items/points_proportional/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` response property `allOf` list for the response status `200`
  - removed `subschema #2, subschema #3` from the `earnings/items/effects/items/` response property `allOf` list for the response status `200`
  - removed `subschema #2, subschema #3` from the `trigger_limits/oneOf[#/components/schemas/EarningRuleTriggerLimits]/frequency/oneOf[#/components/schemas/EarningRuleTriggerLimitsFrequency]/` response property `allOf` list for the response status `200`
  - removed `subschema #3, subschema #4, subschema #5` from the `earnings/items/effects/items/points/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` response property `allOf` list for the response status `200`
  - removed `subschema #3, subschema #4, subschema #5` from the `earnings/items/effects/items/points_proportional/points_expiration/oneOf[#/components/schemas/EarningRuleEffectPointsExpiration]/` response property `allOf` list for the response status `200`
- **2026-07-06** (v2) `341403eb19e5` — 45 breaking, 10 warning, 48 info
  - added the new required request property `earnings/items/effects/items/points/card_definition_id`
  - added the new required request property `earnings/items/effects/items/points/value`
  - added the new required request property `earnings/items/effects/items/points_proportional/calculation_type`
  - added the new required request property `earnings/items/effects/items/points_proportional/card_definition_id`
  - added `subschema #1, subschema #2, subschema #3` to the `validity_hours/oneOf[#/components/schemas/EarningRuleValidityHours]/` request property `allOf` list
  - added `subschema #1, subschema #2, subschema #3, subschema #4` to the `earnings/items/effects/items/` request property `allOf` list
  - added `subschema #1, subschema #2, subschema #3, subschema #4` to the `trigger` request property `allOf` list
  - added `subschema #1, subschema #2, subschema #3, subschema #4, subschema #5, subschema #6, subschema #7, subschema #8` to the `earnings/items/effects/items/points_proportional` request property `allOf` list
  - removed the enum value `INCENTIVE` of the request property `earnings/items/effects/items/type`
  - removed `#/components/schemas/EarningRuleEarningsType` from the `earnings/items/tier_rules` request property `oneOf` list
  - removed `#/components/schemas/EarningRuleEffectPoints, subschema #2` from the `earnings/items/effects/items/points` request property `oneOf` list
  - removed `#/components/schemas/EarningRuleEffectPointsProportional, subschema #2` from the `earnings/items/effects/items/points_proportional` request property `oneOf` list
  - removed `#/components/schemas/TriggerLimitsCooldown` from the `trigger_limits/oneOf[#/components/schemas/EarningRuleTriggerLimits]/cooldown` request property `oneOf` list
  - removed `#/components/schemas/TriggerLimitsFrequency` from the `trigger_limits/oneOf[#/components/schemas/EarningRuleTriggerLimits]/frequency` request property `oneOf` list
  - added the pattern `^ms_[a-zA-Z0-9]+` to the request property `trigger/custom_event/oneOf[#/components/schemas/EarningRuleTriggerCustomEvent]/schema_id`
  - added the pattern `^seg_[a-zA-Z0-9]+` to the request property `trigger/segment/oneOf[#/components/schemas/EarningRuleTriggerSegment]/id`
  - added the pattern property `^[1-9]\d*$` to the `earnings/items/rules/oneOf[#/components/schemas/EarningRuleRulesGroup]/` request property
  - the `earnings/items/effects/items/points` request property type changed from no type to `object`
  - the `earnings/items/effects/items/points_proportional` request property type changed from no type to `object`
  - the response property `code` became optional for the status `400`
  - the response property `code` became optional for the status `404`
  - the response property `code` became optional for the status `500`
  - the response property `created_at` became optional for the status `200`
  - the response property `earnings` became optional for the status `200`
  - the response property `id` became optional for the status `200`
  - the response property `key` became optional for the status `400`
  - the response property `key` became optional for the status `404`
  - the response property `key` became optional for the status `500`
  - the response property `message` became optional for the status `400`
  - the response property `message` became optional for the status `404`
  - the response property `message` became optional for the status `500`
  - the response property `metadata` became optional for the status `200`
  - the response property `name` became optional for the status `200`
  - the response property `object` became optional for the status `200`
  - the response property `status` became optional for the status `200`
  - the response property `trigger` became optional for the status `200`
  - added `#/components/schemas/EarningRuleError` to the `error` response property `oneOf` list for the response status `200`
  - added `#/components/schemas/EarningRuleRulesGroup` to the `earnings/items/rules` response property `oneOf` list for the response status `200`
  - added `#/components/schemas/EarningRuleTierRules, subschema #2` to the `earnings/items/tier_rules` response property `oneOf` list for the response status `200`
  - added `#/components/schemas/EarningRuleTriggerCustomEvent` to the `trigger/custom_event` response property `oneOf` list for the response status `200`
  - …63 more
- **2026-05-26** (v2) `bf7c81751b90` — 1 breaking, 2 info
  - removed `subschema #1: No requirements, subschema #2: Any of` from the `earnings/items/tier_rules` request property `oneOf` list
  - added `#/components/schemas/EarningRuleEarningsType` to the `earnings/items/tier_rules` request property `oneOf` list
  - added the optional property `earnings/items/tier_rules` to the response with the `200` status
- **2026-05-25** (v2) `26ca0378df82` — 1 breaking, 1 info
  - removed the enum value `member.loyalty.tier` of the request property `earnings/items/rules/oneOf[#/components/schemas/EarningRuleRulesGroup]/additionalProperties/name`
  - added the new optional request property `earnings/items/tier_rules`

---

[Operation](https://skmtc.dev/voucherifyio/apis/voucherify-loyalty-v2-api/docs/v2/loyalties/earning-rules/post.md) · [API](https://skmtc.dev/voucherifyio/apis/voucherify-loyalty-v2-api.md) · [Page](https://skmtc.dev/voucherifyio/apis/voucherify-loyalty-v2-api/changes/v2/loyalties/earning-rules/post)
