talon_one 4.0.0 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (347) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +83 -18
  3. data/docs/AchievementProgress.md +2 -0
  4. data/docs/ActivateUserRequest.md +17 -0
  5. data/docs/AdditionalCampaignProperties.md +3 -1
  6. data/docs/AnalyticsDataPoint.md +19 -0
  7. data/docs/AnalyticsDataPointWithTrend.md +19 -0
  8. data/docs/AnalyticsDataPointWithTrendAndInfluencedRate.md +21 -0
  9. data/docs/AnalyticsDataPointWithTrendAndUplift.md +21 -0
  10. data/docs/Application.md +4 -0
  11. data/docs/ApplicationAnalyticsDataPoint.md +6 -6
  12. data/docs/ApplicationCIF.md +33 -0
  13. data/docs/ApplicationCIFExpression.md +27 -0
  14. data/docs/ApplicationCampaignAnalytics.md +13 -19
  15. data/docs/ApplicationCampaignStats.md +1 -3
  16. data/docs/AsyncCouponDeletionJobResponse.md +17 -0
  17. data/docs/BaseLoyaltyProgram.md +8 -4
  18. data/docs/BaseNotification.md +1 -1
  19. data/docs/BaseNotificationEntity.md +1 -1
  20. data/docs/Campaign.md +15 -1
  21. data/docs/CampaignCollectionEditedNotification.md +21 -0
  22. data/docs/CampaignNotificationPolicy.md +3 -1
  23. data/docs/CampaignStateChangedNotification.md +2 -2
  24. data/docs/CampaignStoreBudget.md +25 -0
  25. data/docs/CampaignVersions.md +27 -0
  26. data/docs/CardAddedDeductedPointsNotificationPolicy.md +19 -0
  27. data/docs/CartItem.md +1 -1
  28. data/docs/CodeGeneratorSettings.md +1 -1
  29. data/docs/Coupon.md +3 -3
  30. data/docs/CouponConstraints.md +1 -1
  31. data/docs/CouponCreationJob.md +1 -1
  32. data/docs/CouponDeletionFilters.md +43 -0
  33. data/docs/CouponDeletionJob.md +39 -0
  34. data/docs/CustomerInventory.md +1 -1
  35. data/docs/CustomerSessionV2.md +2 -2
  36. data/docs/Effect.md +8 -0
  37. data/docs/EffectEntity.md +9 -1
  38. data/docs/Environment.md +3 -1
  39. data/docs/Event.md +1 -1
  40. data/docs/GenerateCampaignDescription.md +19 -0
  41. data/docs/GenerateCampaignTags.md +17 -0
  42. data/docs/GenerateItemFilterDescription.md +17 -0
  43. data/docs/GenerateLoyaltyCard.md +19 -0
  44. data/docs/GenerateRuleTitle.md +19 -0
  45. data/docs/GenerateRuleTitleRule.md +19 -0
  46. data/docs/IncreaseAchievementProgressEffectProps.md +1 -1
  47. data/docs/InlineResponse20044.md +1 -1
  48. data/docs/IntegrationApi.md +77 -16
  49. data/docs/IntegrationCoupon.md +3 -3
  50. data/docs/InventoryCoupon.md +3 -3
  51. data/docs/InventoryReferral.md +1 -1
  52. data/docs/LoyaltyBalanceWithTier.md +31 -0
  53. data/docs/LoyaltyBalancesWithTiers.md +19 -0
  54. data/docs/LoyaltyCard.md +6 -2
  55. data/docs/LoyaltyCardBalances.md +21 -0
  56. data/docs/LoyaltyCardBatch.md +21 -0
  57. data/docs/LoyaltyCardBatchResponse.md +19 -0
  58. data/docs/LoyaltyCardProfileRegistration.md +1 -1
  59. data/docs/LoyaltyProgram.md +14 -6
  60. data/docs/ManagementApi.md +1269 -176
  61. data/docs/MessageLogEntry.md +1 -3
  62. data/docs/MessageLogResponse.md +3 -3
  63. data/docs/NewAppWideCouponDeletionJob.md +19 -0
  64. data/docs/NewApplication.md +3 -1
  65. data/docs/NewApplicationCIF.md +27 -0
  66. data/docs/NewApplicationCIFExpression.md +21 -0
  67. data/docs/NewBaseNotification.md +1 -1
  68. data/docs/NewCouponCreationJob.md +1 -1
  69. data/docs/NewCouponDeletionJob.md +17 -0
  70. data/docs/NewCoupons.md +2 -2
  71. data/docs/NewCouponsForMultipleRecipients.md +1 -1
  72. data/docs/NewCustomerSessionV2.md +2 -2
  73. data/docs/NewExternalInvitation.md +21 -0
  74. data/docs/NewLoyaltyProgram.md +8 -4
  75. data/docs/NewOutgoingIntegrationWebhook.md +2 -0
  76. data/docs/NewReferral.md +1 -1
  77. data/docs/NewReferralsForMultipleAdvocates.md +1 -1
  78. data/docs/NewRevisionVersion.md +37 -0
  79. data/docs/NewWebhook.md +2 -0
  80. data/docs/OktaEvent.md +19 -0
  81. data/docs/OktaEventPayload.md +17 -0
  82. data/docs/OktaEventPayloadData.md +17 -0
  83. data/docs/OktaEventTarget.md +21 -0
  84. data/docs/ProjectedTier.md +21 -0
  85. data/docs/Referral.md +1 -1
  86. data/docs/ReferralConstraints.md +1 -1
  87. data/docs/RejectCouponEffectProps.md +3 -1
  88. data/docs/RejectReferralEffectProps.md +3 -1
  89. data/docs/Revision.md +35 -0
  90. data/docs/RevisionActivation.md +17 -0
  91. data/docs/RevisionVersion.md +53 -0
  92. data/docs/RollbackIncreasedAchievementProgressEffectProps.md +27 -0
  93. data/docs/RuleFailureReason.md +5 -1
  94. data/docs/SSOConfig.md +3 -1
  95. data/docs/ScimBaseUser.md +23 -0
  96. data/docs/ScimBaseUserName.md +17 -0
  97. data/docs/ScimNewUser.md +23 -0
  98. data/docs/ScimPatchOperation.md +21 -0
  99. data/docs/ScimPatchRequest.md +19 -0
  100. data/docs/ScimResource.md +21 -0
  101. data/docs/ScimResourceTypesListResponse.md +17 -0
  102. data/docs/ScimSchemaResource.md +23 -0
  103. data/docs/ScimSchemasListResponse.md +21 -0
  104. data/docs/ScimServiceProviderConfigResponse.md +27 -0
  105. data/docs/ScimServiceProviderConfigResponseBulk.md +21 -0
  106. data/docs/ScimServiceProviderConfigResponseChangePassword.md +17 -0
  107. data/docs/ScimServiceProviderConfigResponseFilter.md +19 -0
  108. data/docs/ScimServiceProviderConfigResponsePatch.md +17 -0
  109. data/docs/ScimUser.md +25 -0
  110. data/docs/ScimUsersListResponse.md +21 -0
  111. data/docs/Tier.md +3 -1
  112. data/docs/TransferLoyaltyCard.md +3 -1
  113. data/docs/UpdateApplication.md +5 -1
  114. data/docs/UpdateApplicationCIF.md +23 -0
  115. data/docs/UpdateCampaign.md +1 -1
  116. data/docs/UpdateCoupon.md +2 -2
  117. data/docs/UpdateCouponBatch.md +1 -1
  118. data/docs/UpdateLoyaltyCard.md +4 -2
  119. data/docs/UpdateLoyaltyProgram.md +8 -4
  120. data/docs/UpdateReferral.md +1 -1
  121. data/docs/UpdateReferralBatch.md +1 -1
  122. data/docs/UpdateUser.md +1 -1
  123. data/docs/User.md +3 -1
  124. data/docs/Webhook.md +2 -0
  125. data/docs/WebhookWithOutgoingIntegrationDetails.md +2 -0
  126. data/lib/talon_one/api/integration_api.rb +101 -25
  127. data/lib/talon_one/api/management_api.rb +1362 -189
  128. data/lib/talon_one/models/achievement_progress.rb +16 -1
  129. data/lib/talon_one/models/activate_user_request.rb +213 -0
  130. data/lib/talon_one/models/additional_campaign_properties.rb +21 -6
  131. data/lib/talon_one/models/analytics_data_point.rb +225 -0
  132. data/lib/talon_one/models/analytics_data_point_with_trend.rb +225 -0
  133. data/lib/talon_one/models/analytics_data_point_with_trend_and_influenced_rate.rb +239 -0
  134. data/lib/talon_one/models/analytics_data_point_with_trend_and_uplift.rb +239 -0
  135. data/lib/talon_one/models/application.rb +21 -1
  136. data/lib/talon_one/models/application_analytics_data_point.rb +14 -4
  137. data/lib/talon_one/models/application_campaign_analytics.rb +39 -41
  138. data/lib/talon_one/models/application_campaign_stats.rb +1 -16
  139. data/lib/talon_one/models/application_cif.rb +308 -0
  140. data/lib/talon_one/models/application_cif_expression.rb +275 -0
  141. data/lib/talon_one/models/async_coupon_deletion_job_response.rb +213 -0
  142. data/lib/talon_one/models/attribute.rb +2 -2
  143. data/lib/talon_one/models/base_loyalty_program.rb +44 -25
  144. data/lib/talon_one/models/base_notification.rb +3 -2
  145. data/lib/talon_one/models/base_notification_entity.rb +1 -0
  146. data/lib/talon_one/models/campaign.rb +83 -6
  147. data/lib/talon_one/models/campaign_collection_edited_notification.rb +235 -0
  148. data/lib/talon_one/models/campaign_notification_policy.rb +16 -4
  149. data/lib/talon_one/models/campaign_state_changed_notification.rb +2 -2
  150. data/lib/talon_one/models/campaign_store_budget.rb +275 -0
  151. data/lib/talon_one/models/campaign_versions.rb +259 -0
  152. data/lib/talon_one/models/card_added_deducted_points_notification_policy.rb +269 -0
  153. data/lib/talon_one/models/cart_item.rb +1 -1
  154. data/lib/talon_one/models/code_generator_settings.rb +1 -1
  155. data/lib/talon_one/models/coupon.rb +3 -3
  156. data/lib/talon_one/models/coupon_constraints.rb +1 -1
  157. data/lib/talon_one/models/coupon_creation_job.rb +1 -1
  158. data/lib/talon_one/models/coupon_deletion_filters.rb +375 -0
  159. data/lib/talon_one/models/coupon_deletion_job.rb +370 -0
  160. data/lib/talon_one/models/customer_inventory.rb +1 -1
  161. data/lib/talon_one/models/customer_session_v2.rb +2 -2
  162. data/lib/talon_one/models/effect.rb +41 -1
  163. data/lib/talon_one/models/effect_entity.rb +44 -4
  164. data/lib/talon_one/models/environment.rb +16 -4
  165. data/lib/talon_one/models/event.rb +0 -5
  166. data/lib/talon_one/models/generate_campaign_description.rb +227 -0
  167. data/lib/talon_one/models/generate_campaign_tags.rb +212 -0
  168. data/lib/talon_one/models/generate_item_filter_description.rb +214 -0
  169. data/lib/talon_one/models/generate_loyalty_card.rb +256 -0
  170. data/lib/talon_one/models/generate_rule_title.rb +226 -0
  171. data/lib/talon_one/models/generate_rule_title_rule.rb +221 -0
  172. data/lib/talon_one/models/increase_achievement_progress_effect_props.rb +1 -1
  173. data/lib/talon_one/models/inline_response20044.rb +1 -1
  174. data/lib/talon_one/models/integration_coupon.rb +3 -3
  175. data/lib/talon_one/models/inventory_coupon.rb +3 -3
  176. data/lib/talon_one/models/inventory_referral.rb +1 -1
  177. data/lib/talon_one/models/loyalty_balance_with_tier.rb +276 -0
  178. data/lib/talon_one/models/loyalty_balances_with_tiers.rb +219 -0
  179. data/lib/talon_one/models/loyalty_card.rb +25 -5
  180. data/lib/talon_one/models/loyalty_card_balances.rb +231 -0
  181. data/lib/talon_one/models/loyalty_card_batch.rb +304 -0
  182. data/lib/talon_one/models/loyalty_card_batch_response.rb +227 -0
  183. data/lib/talon_one/models/loyalty_card_profile_registration.rb +1 -1
  184. data/lib/talon_one/models/loyalty_program.rb +70 -29
  185. data/lib/talon_one/models/message_log_entry.rb +4 -14
  186. data/lib/talon_one/models/message_log_response.rb +3 -22
  187. data/lib/talon_one/models/new_app_wide_coupon_deletion_job.rb +227 -0
  188. data/lib/talon_one/models/new_application.rb +14 -4
  189. data/lib/talon_one/models/new_application_cif.rb +262 -0
  190. data/lib/talon_one/models/new_application_cif_expression.rb +229 -0
  191. data/lib/talon_one/models/new_attribute.rb +2 -2
  192. data/lib/talon_one/models/new_base_notification.rb +1 -0
  193. data/lib/talon_one/models/new_coupon_creation_job.rb +1 -1
  194. data/lib/talon_one/models/new_coupon_deletion_job.rb +211 -0
  195. data/lib/talon_one/models/new_coupons.rb +2 -2
  196. data/lib/talon_one/models/new_coupons_for_multiple_recipients.rb +1 -1
  197. data/lib/talon_one/models/new_customer_session_v2.rb +2 -2
  198. data/lib/talon_one/models/new_external_invitation.rb +235 -0
  199. data/lib/talon_one/models/new_loyalty_program.rb +44 -25
  200. data/lib/talon_one/models/new_notification_test.rb +2 -2
  201. data/lib/talon_one/models/new_outgoing_integration_webhook.rb +11 -1
  202. data/lib/talon_one/models/new_referral.rb +1 -1
  203. data/lib/talon_one/models/new_referrals_for_multiple_advocates.rb +1 -1
  204. data/lib/talon_one/models/new_revision_version.rb +352 -0
  205. data/lib/talon_one/models/new_webhook.rb +11 -1
  206. data/lib/talon_one/models/okta_event.rb +229 -0
  207. data/lib/talon_one/models/okta_event_payload.rb +212 -0
  208. data/lib/talon_one/models/okta_event_payload_data.rb +214 -0
  209. data/lib/talon_one/models/okta_event_target.rb +243 -0
  210. data/lib/talon_one/models/projected_tier.rb +232 -0
  211. data/lib/talon_one/models/referral.rb +1 -1
  212. data/lib/talon_one/models/referral_constraints.rb +1 -1
  213. data/lib/talon_one/models/reject_coupon_effect_props.rb +14 -4
  214. data/lib/talon_one/models/reject_referral_effect_props.rb +14 -4
  215. data/lib/talon_one/models/revision.rb +319 -0
  216. data/lib/talon_one/models/revision_activation.rb +206 -0
  217. data/lib/talon_one/models/revision_version.rb +466 -0
  218. data/lib/talon_one/models/rollback_increased_achievement_progress_effect_props.rb +288 -0
  219. data/lib/talon_one/models/rule_failure_reason.rb +24 -4
  220. data/lib/talon_one/models/scim_base_user.rb +237 -0
  221. data/lib/talon_one/models/scim_base_user_name.rb +208 -0
  222. data/lib/talon_one/models/scim_new_user.rb +237 -0
  223. data/lib/talon_one/models/scim_patch_operation.rb +267 -0
  224. data/lib/talon_one/models/scim_patch_request.rb +226 -0
  225. data/lib/talon_one/models/scim_resource.rb +228 -0
  226. data/lib/talon_one/models/scim_resource_types_list_response.rb +214 -0
  227. data/lib/talon_one/models/scim_schema_resource.rb +239 -0
  228. data/lib/talon_one/models/scim_schemas_list_response.rb +236 -0
  229. data/lib/talon_one/models/scim_service_provider_config_response.rb +256 -0
  230. data/lib/talon_one/models/scim_service_provider_config_response_bulk.rb +228 -0
  231. data/lib/talon_one/models/scim_service_provider_config_response_change_password.rb +208 -0
  232. data/lib/talon_one/models/scim_service_provider_config_response_filter.rb +218 -0
  233. data/lib/talon_one/models/scim_service_provider_config_response_patch.rb +208 -0
  234. data/lib/talon_one/models/scim_user.rb +252 -0
  235. data/lib/talon_one/models/scim_users_list_response.rb +236 -0
  236. data/lib/talon_one/models/sso_config.rb +14 -4
  237. data/lib/talon_one/models/tier.rb +12 -2
  238. data/lib/talon_one/models/transfer_loyalty_card.rb +14 -4
  239. data/lib/talon_one/models/update_application.rb +24 -4
  240. data/lib/talon_one/models/update_application_cif.rb +237 -0
  241. data/lib/talon_one/models/update_campaign.rb +1 -1
  242. data/lib/talon_one/models/update_coupon.rb +2 -2
  243. data/lib/talon_one/models/update_coupon_batch.rb +1 -1
  244. data/lib/talon_one/models/update_loyalty_card.rb +15 -5
  245. data/lib/talon_one/models/update_loyalty_program.rb +44 -25
  246. data/lib/talon_one/models/update_referral.rb +1 -1
  247. data/lib/talon_one/models/update_referral_batch.rb +1 -1
  248. data/lib/talon_one/models/update_user.rb +1 -1
  249. data/lib/talon_one/models/user.rb +14 -4
  250. data/lib/talon_one/models/webhook.rb +11 -1
  251. data/lib/talon_one/models/webhook_with_outgoing_integration_details.rb +11 -1
  252. data/lib/talon_one/version.rb +1 -1
  253. data/lib/talon_one.rb +57 -11
  254. data/spec/api/integration_api_spec.rb +25 -10
  255. data/spec/api/management_api_spec.rb +267 -39
  256. data/spec/models/achievement_progress_spec.rb +6 -0
  257. data/spec/models/activate_user_request_spec.rb +41 -0
  258. data/spec/models/additional_campaign_properties_spec.rb +7 -1
  259. data/spec/models/analytics_data_point_spec.rb +47 -0
  260. data/spec/models/analytics_data_point_with_trend_and_influenced_rate_spec.rb +53 -0
  261. data/spec/models/analytics_data_point_with_trend_and_uplift_spec.rb +53 -0
  262. data/spec/models/analytics_data_point_with_trend_spec.rb +47 -0
  263. data/spec/models/application_campaign_analytics_spec.rb +1 -19
  264. data/spec/models/application_campaign_stats_spec.rb +0 -6
  265. data/spec/models/application_cif_expression_spec.rb +71 -0
  266. data/spec/models/application_cif_spec.rb +89 -0
  267. data/spec/models/application_spec.rb +12 -0
  268. data/spec/models/async_coupon_deletion_job_response_spec.rb +41 -0
  269. data/spec/models/attribute_spec.rb +1 -1
  270. data/spec/models/base_loyalty_program_spec.rb +18 -6
  271. data/spec/models/base_notification_spec.rb +1 -1
  272. data/spec/models/campaign_collection_edited_notification_spec.rb +53 -0
  273. data/spec/models/campaign_notification_policy_spec.rb +6 -0
  274. data/spec/models/campaign_spec.rb +43 -1
  275. data/spec/models/campaign_store_budget_spec.rb +65 -0
  276. data/spec/models/campaign_versions_spec.rb +71 -0
  277. data/spec/models/card_added_deducted_points_notification_policy_spec.rb +51 -0
  278. data/spec/models/coupon_deletion_filters_spec.rb +123 -0
  279. data/spec/models/coupon_deletion_job_spec.rb +107 -0
  280. data/spec/models/effect_entity_spec.rb +24 -0
  281. data/spec/models/effect_spec.rb +24 -0
  282. data/spec/models/environment_spec.rb +6 -0
  283. data/spec/models/generate_campaign_description_spec.rb +47 -0
  284. data/spec/models/generate_campaign_tags_spec.rb +41 -0
  285. data/spec/models/generate_item_filter_description_spec.rb +41 -0
  286. data/spec/models/generate_loyalty_card_spec.rb +51 -0
  287. data/spec/models/generate_rule_title_rule_spec.rb +47 -0
  288. data/spec/models/generate_rule_title_spec.rb +47 -0
  289. data/spec/models/loyalty_balance_with_tier_spec.rb +83 -0
  290. data/spec/models/loyalty_balances_with_tiers_spec.rb +47 -0
  291. data/spec/models/loyalty_card_balances_spec.rb +53 -0
  292. data/spec/models/loyalty_card_batch_response_spec.rb +47 -0
  293. data/spec/models/loyalty_card_batch_spec.rb +57 -0
  294. data/spec/models/loyalty_card_spec.rb +12 -0
  295. data/spec/models/loyalty_program_spec.rb +30 -6
  296. data/spec/models/message_log_entry_spec.rb +1 -7
  297. data/spec/models/new_app_wide_coupon_deletion_job_spec.rb +47 -0
  298. data/spec/models/new_application_cif_expression_spec.rb +53 -0
  299. data/spec/models/new_application_cif_spec.rb +71 -0
  300. data/spec/models/new_application_spec.rb +6 -0
  301. data/spec/models/new_attribute_spec.rb +1 -1
  302. data/spec/models/new_coupon_deletion_job_spec.rb +41 -0
  303. data/spec/models/new_external_invitation_spec.rb +53 -0
  304. data/spec/models/new_loyalty_program_spec.rb +18 -6
  305. data/spec/models/new_notification_test_spec.rb +1 -1
  306. data/spec/models/new_outgoing_integration_webhook_spec.rb +6 -0
  307. data/spec/models/new_revision_version_spec.rb +105 -0
  308. data/spec/models/new_webhook_spec.rb +6 -0
  309. data/spec/models/okta_event_payload_data_spec.rb +41 -0
  310. data/spec/models/okta_event_payload_spec.rb +41 -0
  311. data/spec/models/okta_event_spec.rb +47 -0
  312. data/spec/models/okta_event_target_spec.rb +53 -0
  313. data/spec/models/projected_tier_spec.rb +53 -0
  314. data/spec/models/reject_coupon_effect_props_spec.rb +6 -0
  315. data/spec/models/reject_referral_effect_props_spec.rb +6 -0
  316. data/spec/models/revision_activation_spec.rb +41 -0
  317. data/spec/models/revision_spec.rb +95 -0
  318. data/spec/models/revision_version_spec.rb +153 -0
  319. data/spec/models/rollback_increased_achievement_progress_effect_props_spec.rb +71 -0
  320. data/spec/models/rule_failure_reason_spec.rb +12 -0
  321. data/spec/models/scim_base_user_name_spec.rb +41 -0
  322. data/spec/models/scim_base_user_spec.rb +59 -0
  323. data/spec/models/scim_new_user_spec.rb +59 -0
  324. data/spec/models/scim_patch_operation_spec.rb +57 -0
  325. data/spec/models/scim_patch_request_spec.rb +47 -0
  326. data/spec/models/scim_resource_spec.rb +53 -0
  327. data/spec/models/scim_resource_types_list_response_spec.rb +41 -0
  328. data/spec/models/scim_schema_resource_spec.rb +59 -0
  329. data/spec/models/scim_schemas_list_response_spec.rb +53 -0
  330. data/spec/models/scim_service_provider_config_response_bulk_spec.rb +53 -0
  331. data/spec/models/scim_service_provider_config_response_change_password_spec.rb +41 -0
  332. data/spec/models/scim_service_provider_config_response_filter_spec.rb +47 -0
  333. data/spec/models/scim_service_provider_config_response_patch_spec.rb +41 -0
  334. data/spec/models/scim_service_provider_config_response_spec.rb +71 -0
  335. data/spec/models/scim_user_spec.rb +65 -0
  336. data/spec/models/scim_users_list_response_spec.rb +53 -0
  337. data/spec/models/sso_config_spec.rb +6 -0
  338. data/spec/models/tier_spec.rb +6 -0
  339. data/spec/models/transfer_loyalty_card_spec.rb +6 -0
  340. data/spec/models/update_application_cif_spec.rb +59 -0
  341. data/spec/models/update_application_spec.rb +12 -0
  342. data/spec/models/update_loyalty_card_spec.rb +6 -0
  343. data/spec/models/update_loyalty_program_spec.rb +18 -6
  344. data/spec/models/user_spec.rb +6 -0
  345. data/spec/models/webhook_spec.rb +6 -0
  346. data/spec/models/webhook_with_outgoing_integration_details_spec.rb +6 -0
  347. metadata +246 -18
@@ -0,0 +1,235 @@
1
+ =begin
2
+ #Talon.One API
3
+
4
+ #Use the Talon.One API to integrate with your application and to manage applications and campaigns: - Use the operations in the [Integration API section](#integration-api) are used to integrate with our platform - Use the operation in the [Management API section](#management-api) to manage applications and campaigns. ## Determining the base URL of the endpoints The API is available at the same hostname as your Campaign Manager deployment. For example, if you access the Campaign Manager at `https://yourbaseurl.talon.one/`, the URL for the [updateCustomerSessionV2](https://docs.talon.one/integration-api#operation/updateCustomerSessionV2) endpoint is `https://yourbaseurl.talon.one/v2/customer_sessions/{Id}`
5
+
6
+ The version of the OpenAPI document:
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 4.3.1
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module TalonOne
16
+ # Parameters for inviting a new user from an external identity provider.
17
+ class NewExternalInvitation
18
+ # Name of the user.
19
+ attr_accessor :name
20
+
21
+ # List of user groups in the external identity provider. If there are roles in Talon.One whose names match these user groups, those roles will be automatically assigned to the user upon invitation.
22
+ attr_accessor :user_groups
23
+
24
+ # Email address of the user.
25
+ attr_accessor :email
26
+
27
+ # Attribute mapping from ruby-style variable name to JSON key.
28
+ def self.attribute_map
29
+ {
30
+ :'name' => :'name',
31
+ :'user_groups' => :'userGroups',
32
+ :'email' => :'email'
33
+ }
34
+ end
35
+
36
+ # Attribute type mapping.
37
+ def self.openapi_types
38
+ {
39
+ :'name' => :'String',
40
+ :'user_groups' => :'Array<String>',
41
+ :'email' => :'String'
42
+ }
43
+ end
44
+
45
+ # List of attributes with nullable: true
46
+ def self.openapi_nullable
47
+ Set.new([
48
+ ])
49
+ end
50
+
51
+ # Initializes the object
52
+ # @param [Hash] attributes Model attributes in the form of hash
53
+ def initialize(attributes = {})
54
+ if (!attributes.is_a?(Hash))
55
+ fail ArgumentError, "The input argument (attributes) must be a hash in `TalonOne::NewExternalInvitation` initialize method"
56
+ end
57
+
58
+ # check to see if the attribute exists and convert string to symbol for hash key
59
+ attributes = attributes.each_with_object({}) { |(k, v), h|
60
+ if (!self.class.attribute_map.key?(k.to_sym))
61
+ fail ArgumentError, "`#{k}` is not a valid attribute in `TalonOne::NewExternalInvitation`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
62
+ end
63
+ h[k.to_sym] = v
64
+ }
65
+
66
+ if attributes.key?(:'name')
67
+ self.name = attributes[:'name']
68
+ end
69
+
70
+ if attributes.key?(:'user_groups')
71
+ if (value = attributes[:'user_groups']).is_a?(Array)
72
+ self.user_groups = value
73
+ end
74
+ end
75
+
76
+ if attributes.key?(:'email')
77
+ self.email = attributes[:'email']
78
+ end
79
+ end
80
+
81
+ # Show invalid properties with the reasons. Usually used together with valid?
82
+ # @return Array for valid properties with the reasons
83
+ def list_invalid_properties
84
+ invalid_properties = Array.new
85
+ if @email.nil?
86
+ invalid_properties.push('invalid value for "email", email cannot be nil.')
87
+ end
88
+
89
+ invalid_properties
90
+ end
91
+
92
+ # Check to see if the all the properties in the model are valid
93
+ # @return true if the model is valid
94
+ def valid?
95
+ return false if @email.nil?
96
+ true
97
+ end
98
+
99
+ # Checks equality by comparing each attribute.
100
+ # @param [Object] Object to be compared
101
+ def ==(o)
102
+ return true if self.equal?(o)
103
+ self.class == o.class &&
104
+ name == o.name &&
105
+ user_groups == o.user_groups &&
106
+ email == o.email
107
+ end
108
+
109
+ # @see the `==` method
110
+ # @param [Object] Object to be compared
111
+ def eql?(o)
112
+ self == o
113
+ end
114
+
115
+ # Calculates hash code according to all attributes.
116
+ # @return [Integer] Hash code
117
+ def hash
118
+ [name, user_groups, email].hash
119
+ end
120
+
121
+ # Builds the object from hash
122
+ # @param [Hash] attributes Model attributes in the form of hash
123
+ # @return [Object] Returns the model itself
124
+ def self.build_from_hash(attributes)
125
+ new.build_from_hash(attributes)
126
+ end
127
+
128
+ # Builds the object from hash
129
+ # @param [Hash] attributes Model attributes in the form of hash
130
+ # @return [Object] Returns the model itself
131
+ def build_from_hash(attributes)
132
+ return nil unless attributes.is_a?(Hash)
133
+ self.class.openapi_types.each_pair do |key, type|
134
+ if type =~ /\AArray<(.*)>/i
135
+ # check to ensure the input is an array given that the attribute
136
+ # is documented as an array but the input is not
137
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
138
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
139
+ end
140
+ elsif !attributes[self.class.attribute_map[key]].nil?
141
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
142
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
143
+ end
144
+
145
+ self
146
+ end
147
+
148
+ # Deserializes the data based on type
149
+ # @param string type Data type
150
+ # @param string value Value to be deserialized
151
+ # @return [Object] Deserialized data
152
+ def _deserialize(type, value)
153
+ case type.to_sym
154
+ when :DateTime
155
+ DateTime.parse(value)
156
+ when :Date
157
+ Date.parse(value)
158
+ when :String
159
+ value.to_s
160
+ when :Integer
161
+ value.to_i
162
+ when :Float
163
+ value.to_f
164
+ when :Boolean
165
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
166
+ true
167
+ else
168
+ false
169
+ end
170
+ when :Object
171
+ # generic object (usually a Hash), return directly
172
+ value
173
+ when /\AArray<(?<inner_type>.+)>\z/
174
+ inner_type = Regexp.last_match[:inner_type]
175
+ value.map { |v| _deserialize(inner_type, v) }
176
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
177
+ k_type = Regexp.last_match[:k_type]
178
+ v_type = Regexp.last_match[:v_type]
179
+ {}.tap do |hash|
180
+ value.each do |k, v|
181
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
182
+ end
183
+ end
184
+ else # model
185
+ TalonOne.const_get(type).build_from_hash(value)
186
+ end
187
+ end
188
+
189
+ # Returns the string representation of the object
190
+ # @return [String] String presentation of the object
191
+ def to_s
192
+ to_hash.to_s
193
+ end
194
+
195
+ # to_body is an alias to to_hash (backward compatibility)
196
+ # @return [Hash] Returns the object in the form of hash
197
+ def to_body
198
+ to_hash
199
+ end
200
+
201
+ # Returns the object in the form of hash
202
+ # @return [Hash] Returns the object in the form of hash
203
+ def to_hash
204
+ hash = {}
205
+ self.class.attribute_map.each_pair do |attr, param|
206
+ value = self.send(attr)
207
+ if value.nil?
208
+ is_nullable = self.class.openapi_nullable.include?(attr)
209
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
210
+ end
211
+
212
+ hash[param] = _to_hash(value)
213
+ end
214
+ hash
215
+ end
216
+
217
+ # Outputs non-array value in the form of hash
218
+ # For object, use to_hash. Otherwise, just return the value
219
+ # @param [Object] value Any valid value
220
+ # @return [Hash] Returns the value in the form of hash
221
+ def _to_hash(value)
222
+ if value.is_a?(Array)
223
+ value.compact.map { |v| _to_hash(v) }
224
+ elsif value.is_a?(Hash)
225
+ {}.tap do |hash|
226
+ value.each { |k, v| hash[k] = _to_hash(v) }
227
+ end
228
+ elsif value.respond_to? :to_hash
229
+ value.to_hash
230
+ else
231
+ value
232
+ end
233
+ end
234
+ end
235
+ end
@@ -39,17 +39,22 @@ module TalonOne
39
39
  # Indicates if this program is a live or sandbox program. Programs of a given type can only be connected to Applications of the same type.
40
40
  attr_accessor :sandbox
41
41
 
42
- # The policy that defines which date is used to calculate the expiration date of a customer's current tier. - `tier_start_date`: The tier expiration date is calculated based on when the customer joined the current tier. - `program_join_date`: The tier expiration date is calculated based on when the customer joined the loyalty program.
42
+ # The policy that defines when the customer joins the loyalty program. - `not_join`: The customer does not join the loyalty program but can still earn and spend loyalty points. **Note**: The customer does not have a program join date. - `points_activated`: The customer joins the loyalty program only when their earned loyalty points become active for the first time. - `points_earned`: The customer joins the loyalty program when they earn loyalty points for the first time.
43
+ attr_accessor :program_join_policy
44
+
45
+ # The policy that defines how tier expiration, used to reevaluate the customer's current tier, is determined. - `tier_start_date`: The tier expiration is relative to when the customer joined the current tier. - `program_join_date`: The tier expiration is relative to when the customer joined the loyalty program. - `customer_attribute`: The tier expiration is determined by a custom customer attribute. - `absolute_expiration`: The tier is reevaluated at the start of each tier cycle. For this policy, it is required to provide a `tierCycleStartDate`.
43
46
  attr_accessor :tiers_expiration_policy
44
47
 
45
- # The amount of time after which the tier expires. The time format is an **integer** followed by one letter indicating the time unit. Examples: `30s`, `40m`, `1h`, `5D`, `7W`, `10M`, `15Y`. Available units: - `s`: seconds - `m`: minutes - `h`: hours - `D`: days - `W`: weeks - `M`: months - `Y`: years You can round certain units up or down: - `_D` for rounding down days only. Signifies the start of the day. - `_U` for rounding up days, weeks, months and years. Signifies the end of the day, week, month or year.
48
+ # Timestamp at which the tier cycle starts for all customers in the loyalty program. **Note**: This is only required when the tier expiration policy is set to `absolute_expiration`.
49
+ attr_accessor :tier_cycle_start_date
50
+
51
+ # The amount of time after which the tier expires and is reevaluated. The time format is an **integer** followed by one letter indicating the time unit. Examples: `30s`, `40m`, `1h`, `5D`, `7W`, `10M`, `15Y`. Available units: - `s`: seconds - `m`: minutes - `h`: hours - `D`: days - `W`: weeks - `M`: months - `Y`: years You can round certain units up or down: - `_D` for rounding down days only. Signifies the start of the day. - `_U` for rounding up days, weeks, months and years. Signifies the end of the day, week, month or year.
46
52
  attr_accessor :tiers_expire_in
47
53
 
48
- # Customers's tier downgrade policy. - `one_down`: Once the tier expires and if the user doesn't have enough points to stay in the tier, the user is downgraded one tier down. - `balance_based`: Once the tier expires, the user's tier is evaluated based on the amount of active points the user has at this instant.
54
+ # The policy that defines how customer tiers are downgraded in the loyalty program after tier reevaluation. - `one_down`: If the customer doesn't have enough points to stay in the current tier, they are downgraded by one tier. - `balance_based`: The customer's tier is reevaluated based on the amount of active points they have at the moment.
49
55
  attr_accessor :tiers_downgrade_policy
50
56
 
51
- # The policy that defines when the customer joins the loyalty program. - `not_join`: The customer does not join the loyalty program but can still earn and spend loyalty points. **Note**: The customer does not have a program join date. - `points_activated`: The customer joins the loyalty program only when their earned loyalty points become active for the first time. - `points_earned`: The customer joins the loyalty program when they earn loyalty points for the first time.
52
- attr_accessor :program_join_policy
57
+ attr_accessor :card_code_settings
53
58
 
54
59
  # The internal name for the Loyalty Program. This is an immutable value.
55
60
  attr_accessor :name
@@ -96,10 +101,12 @@ module TalonOne
96
101
  :'allow_subledger' => :'allowSubledger',
97
102
  :'users_per_card_limit' => :'usersPerCardLimit',
98
103
  :'sandbox' => :'sandbox',
104
+ :'program_join_policy' => :'programJoinPolicy',
99
105
  :'tiers_expiration_policy' => :'tiersExpirationPolicy',
106
+ :'tier_cycle_start_date' => :'tierCycleStartDate',
100
107
  :'tiers_expire_in' => :'tiersExpireIn',
101
108
  :'tiers_downgrade_policy' => :'tiersDowngradePolicy',
102
- :'program_join_policy' => :'programJoinPolicy',
109
+ :'card_code_settings' => :'cardCodeSettings',
103
110
  :'name' => :'name',
104
111
  :'tiers' => :'tiers',
105
112
  :'timezone' => :'timezone',
@@ -118,10 +125,12 @@ module TalonOne
118
125
  :'allow_subledger' => :'Boolean',
119
126
  :'users_per_card_limit' => :'Integer',
120
127
  :'sandbox' => :'Boolean',
128
+ :'program_join_policy' => :'String',
121
129
  :'tiers_expiration_policy' => :'String',
130
+ :'tier_cycle_start_date' => :'DateTime',
122
131
  :'tiers_expire_in' => :'String',
123
132
  :'tiers_downgrade_policy' => :'String',
124
- :'program_join_policy' => :'String',
133
+ :'card_code_settings' => :'CodeGeneratorSettings',
125
134
  :'name' => :'String',
126
135
  :'tiers' => :'Array<NewLoyaltyTier>',
127
136
  :'timezone' => :'String',
@@ -184,10 +193,18 @@ module TalonOne
184
193
  self.sandbox = attributes[:'sandbox']
185
194
  end
186
195
 
196
+ if attributes.key?(:'program_join_policy')
197
+ self.program_join_policy = attributes[:'program_join_policy']
198
+ end
199
+
187
200
  if attributes.key?(:'tiers_expiration_policy')
188
201
  self.tiers_expiration_policy = attributes[:'tiers_expiration_policy']
189
202
  end
190
203
 
204
+ if attributes.key?(:'tier_cycle_start_date')
205
+ self.tier_cycle_start_date = attributes[:'tier_cycle_start_date']
206
+ end
207
+
191
208
  if attributes.key?(:'tiers_expire_in')
192
209
  self.tiers_expire_in = attributes[:'tiers_expire_in']
193
210
  end
@@ -196,8 +213,8 @@ module TalonOne
196
213
  self.tiers_downgrade_policy = attributes[:'tiers_downgrade_policy']
197
214
  end
198
215
 
199
- if attributes.key?(:'program_join_policy')
200
- self.program_join_policy = attributes[:'program_join_policy']
216
+ if attributes.key?(:'card_code_settings')
217
+ self.card_code_settings = attributes[:'card_code_settings']
201
218
  end
202
219
 
203
220
  if attributes.key?(:'name')
@@ -277,12 +294,12 @@ module TalonOne
277
294
  return false if @allow_subledger.nil?
278
295
  return false if !@users_per_card_limit.nil? && @users_per_card_limit < 0
279
296
  return false if @sandbox.nil?
280
- tiers_expiration_policy_validator = EnumAttributeValidator.new('String', ["tier_start_date", "program_join_date"])
297
+ program_join_policy_validator = EnumAttributeValidator.new('String', ["not_join", "points_activated", "points_earned"])
298
+ return false unless program_join_policy_validator.valid?(@program_join_policy)
299
+ tiers_expiration_policy_validator = EnumAttributeValidator.new('String', ["tier_start_date", "program_join_date", "customer_attribute", "absolute_expiration"])
281
300
  return false unless tiers_expiration_policy_validator.valid?(@tiers_expiration_policy)
282
301
  tiers_downgrade_policy_validator = EnumAttributeValidator.new('String', ["one_down", "balance_based"])
283
302
  return false unless tiers_downgrade_policy_validator.valid?(@tiers_downgrade_policy)
284
- program_join_policy_validator = EnumAttributeValidator.new('String', ["not_join", "points_activated", "points_earned"])
285
- return false unless program_join_policy_validator.valid?(@program_join_policy)
286
303
  return false if @name.nil?
287
304
  return false if @timezone.nil?
288
305
  return false if @timezone.to_s.length < 1
@@ -300,10 +317,20 @@ module TalonOne
300
317
  @users_per_card_limit = users_per_card_limit
301
318
  end
302
319
 
320
+ # Custom attribute writer method checking allowed values (enum).
321
+ # @param [Object] program_join_policy Object to be assigned
322
+ def program_join_policy=(program_join_policy)
323
+ validator = EnumAttributeValidator.new('String', ["not_join", "points_activated", "points_earned"])
324
+ unless validator.valid?(program_join_policy)
325
+ fail ArgumentError, "invalid value for \"program_join_policy\", must be one of #{validator.allowable_values}."
326
+ end
327
+ @program_join_policy = program_join_policy
328
+ end
329
+
303
330
  # Custom attribute writer method checking allowed values (enum).
304
331
  # @param [Object] tiers_expiration_policy Object to be assigned
305
332
  def tiers_expiration_policy=(tiers_expiration_policy)
306
- validator = EnumAttributeValidator.new('String', ["tier_start_date", "program_join_date"])
333
+ validator = EnumAttributeValidator.new('String', ["tier_start_date", "program_join_date", "customer_attribute", "absolute_expiration"])
307
334
  unless validator.valid?(tiers_expiration_policy)
308
335
  fail ArgumentError, "invalid value for \"tiers_expiration_policy\", must be one of #{validator.allowable_values}."
309
336
  end
@@ -320,16 +347,6 @@ module TalonOne
320
347
  @tiers_downgrade_policy = tiers_downgrade_policy
321
348
  end
322
349
 
323
- # Custom attribute writer method checking allowed values (enum).
324
- # @param [Object] program_join_policy Object to be assigned
325
- def program_join_policy=(program_join_policy)
326
- validator = EnumAttributeValidator.new('String', ["not_join", "points_activated", "points_earned"])
327
- unless validator.valid?(program_join_policy)
328
- fail ArgumentError, "invalid value for \"program_join_policy\", must be one of #{validator.allowable_values}."
329
- end
330
- @program_join_policy = program_join_policy
331
- end
332
-
333
350
  # Custom attribute writer method with validation
334
351
  # @param [Object] timezone Value to be assigned
335
352
  def timezone=(timezone)
@@ -357,10 +374,12 @@ module TalonOne
357
374
  allow_subledger == o.allow_subledger &&
358
375
  users_per_card_limit == o.users_per_card_limit &&
359
376
  sandbox == o.sandbox &&
377
+ program_join_policy == o.program_join_policy &&
360
378
  tiers_expiration_policy == o.tiers_expiration_policy &&
379
+ tier_cycle_start_date == o.tier_cycle_start_date &&
361
380
  tiers_expire_in == o.tiers_expire_in &&
362
381
  tiers_downgrade_policy == o.tiers_downgrade_policy &&
363
- program_join_policy == o.program_join_policy &&
382
+ card_code_settings == o.card_code_settings &&
364
383
  name == o.name &&
365
384
  tiers == o.tiers &&
366
385
  timezone == o.timezone &&
@@ -376,7 +395,7 @@ module TalonOne
376
395
  # Calculates hash code according to all attributes.
377
396
  # @return [Integer] Hash code
378
397
  def hash
379
- [title, description, subscribed_applications, default_validity, default_pending, allow_subledger, users_per_card_limit, sandbox, tiers_expiration_policy, tiers_expire_in, tiers_downgrade_policy, program_join_policy, name, tiers, timezone, card_based].hash
398
+ [title, description, subscribed_applications, default_validity, default_pending, allow_subledger, users_per_card_limit, sandbox, program_join_policy, tiers_expiration_policy, tier_cycle_start_date, tiers_expire_in, tiers_downgrade_policy, card_code_settings, name, tiers, timezone, card_based].hash
380
399
  end
381
400
 
382
401
  # Builds the object from hash
@@ -155,7 +155,7 @@ module TalonOne
155
155
  # @return true if the model is valid
156
156
  def valid?
157
157
  return false if @type.nil?
158
- type_validator = EnumAttributeValidator.new('String', ["campaign", "loyalty_added_deducted_points", "coupon", "expiring_coupons", "expiring_points", "pending_to_active_points", "strikethrough_pricing", "tier_downgrade", "tier_upgrade", "tier_will_downgrade", "card_expiring_points"])
158
+ type_validator = EnumAttributeValidator.new('String', ["campaign", "loyalty_added_deducted_points", "card_added_deducted_points", "coupon", "expiring_coupons", "expiring_points", "pending_to_active_points", "strikethrough_pricing", "tier_downgrade", "tier_upgrade", "tier_will_downgrade", "card_expiring_points"])
159
159
  return false unless type_validator.valid?(@type)
160
160
  return false if @verb.nil?
161
161
  verb_validator = EnumAttributeValidator.new('String', ["POST", "PUT", "GET", "DELETE", "PATCH"])
@@ -168,7 +168,7 @@ module TalonOne
168
168
  # Custom attribute writer method checking allowed values (enum).
169
169
  # @param [Object] type Object to be assigned
170
170
  def type=(type)
171
- validator = EnumAttributeValidator.new('String', ["campaign", "loyalty_added_deducted_points", "coupon", "expiring_coupons", "expiring_points", "pending_to_active_points", "strikethrough_pricing", "tier_downgrade", "tier_upgrade", "tier_will_downgrade", "card_expiring_points"])
171
+ validator = EnumAttributeValidator.new('String', ["campaign", "loyalty_added_deducted_points", "card_added_deducted_points", "coupon", "expiring_coupons", "expiring_points", "pending_to_active_points", "strikethrough_pricing", "tier_downgrade", "tier_upgrade", "tier_will_downgrade", "card_expiring_points"])
172
172
  unless validator.valid?(type)
173
173
  fail ArgumentError, "invalid value for \"type\", must be one of #{validator.allowable_values}."
174
174
  end
@@ -17,6 +17,9 @@ module TalonOne
17
17
  # Webhook title.
18
18
  attr_accessor :title
19
19
 
20
+ # A description of the webhook.
21
+ attr_accessor :description
22
+
20
23
  # IDs of the Applications to which a webhook must be linked.
21
24
  attr_accessor :application_ids
22
25
 
@@ -24,6 +27,7 @@ module TalonOne
24
27
  def self.attribute_map
25
28
  {
26
29
  :'title' => :'title',
30
+ :'description' => :'description',
27
31
  :'application_ids' => :'applicationIds'
28
32
  }
29
33
  end
@@ -32,6 +36,7 @@ module TalonOne
32
36
  def self.openapi_types
33
37
  {
34
38
  :'title' => :'String',
39
+ :'description' => :'String',
35
40
  :'application_ids' => :'Array<Integer>'
36
41
  }
37
42
  end
@@ -61,6 +66,10 @@ module TalonOne
61
66
  self.title = attributes[:'title']
62
67
  end
63
68
 
69
+ if attributes.key?(:'description')
70
+ self.description = attributes[:'description']
71
+ end
72
+
64
73
  if attributes.key?(:'application_ids')
65
74
  if (value = attributes[:'application_ids']).is_a?(Array)
66
75
  self.application_ids = value
@@ -97,6 +106,7 @@ module TalonOne
97
106
  return true if self.equal?(o)
98
107
  self.class == o.class &&
99
108
  title == o.title &&
109
+ description == o.description &&
100
110
  application_ids == o.application_ids
101
111
  end
102
112
 
@@ -109,7 +119,7 @@ module TalonOne
109
119
  # Calculates hash code according to all attributes.
110
120
  # @return [Integer] Hash code
111
121
  def hash
112
- [title, application_ids].hash
122
+ [title, description, application_ids].hash
113
123
  end
114
124
 
115
125
  # Builds the object from hash
@@ -18,7 +18,7 @@ module TalonOne
18
18
  # Timestamp at which point the referral code becomes valid.
19
19
  attr_accessor :start_date
20
20
 
21
- # Expiration date of the referral code. Referral never expires if this is omitted, zero, or negative.
21
+ # Expiration date of the referral code. Referral never expires if this is omitted.
22
22
  attr_accessor :expiry_date
23
23
 
24
24
  # The number of times a referral code can be used. `0` means no limit but any campaign usage limits will still apply.
@@ -18,7 +18,7 @@ module TalonOne
18
18
  # Timestamp at which point the referral code becomes valid.
19
19
  attr_accessor :start_date
20
20
 
21
- # Expiration date of the referral code. Referral never expires if this is omitted, zero, or negative.
21
+ # Expiration date of the referral code. Referral never expires if this is omitted.
22
22
  attr_accessor :expiry_date
23
23
 
24
24
  # The number of times a referral code can be used. `0` means no limit but any campaign usage limits will still apply.