Create Reward Earn Rule
Overview
Highnote's rewards feature supports creating rewards programs for your card products. The rewards feature works by using configurable reward earn rules. Once you attach a reward earn rule to your card product, account holders can earn rewards. They can then redeem these rewards through reward redemptions.
Reward earn rules define how account holders earn rewards points. Highnote supports two types of reward earn rule configurations:
- MCC-based reward earn rules: Earn rewards for dollars spent at specific MCCs
- Default reward earn rules: Earn rewards for transactions that don’t qualify for specific earning rules
You can use both MCC-based and default reward earn rules to create a robust rewards system. For example, you could use MCC-based earn rules to offer 3% cash back on travel. Then, you could use default earn rules to offer 1% cash back on everything else.
Note the following guidelines when creating an MCC-based earn rule:
- If a card product uses both MCC-based and default earn rules, Highnote prioritizes the MCC-based earn rule.
- You can't create two different MCC-based earn rules with the same MCC (ex: a restaurant with 3% cash back and a different restaurant with 2% cash back).
Enable the feature
To offer rewards for your card product, you must contact support@highnote.com to request access to the feature. The feature is enabled in the Test environment by default for all consumer revolving credit card products.
To use the feature for your card product(s) in the Live environment, you must complete the following requirements:
- Work with your Highnote Implementation team to define your reward program's policies and rules.
- Get your rewards program approved by Highnote and the Partner Bank.
- Once approved, work with your Highnote Implementation team to configure your reward earn rules and redemptions in your Live environment.
The Test environment allows you to fully test the feature before going live.
Reward point earnings
When creating reward earn rules, you must set reward point earnings. Reward point earnings set your reward rate. For example, if you set a reward point earning of 2, your account holders will earn 2 points for every $1 spent.
Highnote rounds down fractional reward points. For example, the following scenarios outline examples of a reward point earning rate of 1.57:
- A cardholder who spends $100 would earn 157 reward points.
- Another cardholder who spends $11.50 on a transaction would earn 18.055 reward points. Highnote rounds this number down to 18 reward points in the reward points ledger.
Create MCC-based reward earn rule
Once your rewards program is approved, the Highnote team will assist with creating reward earn rules in the Live environment.
Use the following mutation to create an MCC-based reward earn rule in the Test environment. Adjust the rewardPointEarning rate according to your own reward point logic:
CreateRewardMerchantCategoryEarnRule
Query
mutation CreateRewardMerchantCategoryEarnRule(
$input: CreateRewardMerchantCategoryEarnRuleInput!
$firstAttachments: Int
$afterAttachments: String
) {
createRewardMerchantCategoryEarnRule(input: $input) {
__typename
... on RewardMerchantCategoryEarnRule {
id
type
name
attachments(first: $firstAttachments, after: $afterAttachments) {
__typename
... on RewardRuleAttachmentConnection {
pageInfo {
hasNextPage
}
edges {
node {
effectiveFrom
effectiveThrough
... on RewardRuleProductAttachment {
rewardEarnRule {
id
}
cardProduct {
id
}
}
}
}
}
}
rewardPointEarning {
rate
}
createdAt
allowedList
updatedAt
}
... on UserError {
errors {
errorPath
code
description
}
}
}
}
Variables
{ "input": { "name": "ruleName", "rewardPointEarning": { "rate": "1.5" }, "allowedList": [ "EATING_PLACES_RESTAURANTS", "FAST_FOOD_RESTAURANTS" ] } }
Result
{
"data": {
"createRewardMerchantCategoryEarnRule": {
"__typename": "RewardMerchantCategoryEarnRule",
"id": "REWARD_EARN_RULE_ID",
"name": "ruleName",
"type": "PER_TRANSACTION_SPEND_AMOUNT",
"attachments": {
"__typename": "RewardRuleAttachmentConnection",
"pageInfo": {
"hasNextPage": false
},
"edges": []
},
"rewardPointEarning": {
"rate": "1.5"
},
"createdAt": "2023-02-23T00:00:00.000Z",
"allowedList": [
"EATING_PLACES_RESTAURANTS",
"FAST_FOOD_RESTAURANTS"
],
"updatedAt": "2023-02-23T00:00:00.000Z"
}
},
"extensions": {
"requestId": "REQUEST_ID",
"rateLimit": {
"cost": 54
}
}
}
Create default reward earn rule
Once your rewards program is approved, the Highnote team will assist with creating reward earn rules in the Live environment.
Use the following mutation to create a default reward earn rule in the Test environment. Adjust the rewardPointEarning rate according to your own reward point logic:
CreateRewardDefaultEarnRule
Query
mutation CreateRewardDefaultEarnRule(
$input: CreateRewardDefaultEarnRuleInput!
) {
createRewardDefaultEarnRule(input: $input) {
__typename
... on RewardDefaultEarnRule {
id
type
name
attachments {
__typename
... on RewardRuleAttachmentConnection {
pageInfo {
hasNextPage
hasPreviousPage
endCursor
startCursor
}
edges {
node {
effectiveFrom
effectiveThrough
... on RewardRuleProductAttachment {
rewardEarnRule {
id
}
cardProduct {
id
}
}
}
}
}
}
rewardPointEarning {
rate
}
createdAt
updatedAt
}
... on UserError {
errors {
errorPath
code
description
}
}
}
}
Variables
{ "input": { "name": "ruleName", "rewardPointEarning": { "rate": "1.5" } } }
Result
{
"data": {
"createRewardDefaultEarnRule": {
"__typename": "RewardDefaultEarnRule",
"id": "REWANRD_EARN_RULE_ID",
"type": "PER_TRANSACTION_SPEND_AMOUNT",
"name": "ruleName",
"attachments": {
"__typename": "RewardRuleAttachmentConnection",
"pageInfo": {
"endCursor": "",
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": ""
},
"edges": []
},
"rewardPointEarning": {
"rate": "1.5"
},
"createdAt": "2023-02-23T00:00:00.000Z",
"updatedAt": "2023-02-23T00:00:00.000Z"
}
},
"extensions": {
"requestId": "REQUEST_ID",
"rateLimit": {
"cost": 54
}
}
}
Attach reward earn rule to card product
Once your rewards program is approved, the Highnote team will assist with attaching your earn rules to your card product(s) in the Live environment.
After creating a reward earn rule, you must attach it to a card product. This allows all account holders for that card product to start earning rewards.
Use the following mutation to attach a reward earn rule to a card product in the Test environment:
AttachRewardEarnRuleToProduct
Query
mutation AttachRewardEarnRuleToProduct(
$input: AttachRewardEarnRuleToProductInput!
) {
attachRewardEarnRuleToProduct(input: $input) {
__typename
... on RewardRuleProductAttachment {
effectiveFrom
effectiveThrough
rewardEarnRule {
id
}
... on RewardRuleProductAttachment {
cardProduct {
id
}
}
}
... on UserError {
errors {
errorPath
code
description
}
}
}
}
Variables
{ "input": { "cardProductId": "CARD_PRODUCT_ID", "rewardRule": { "id": "REWARD_EARN_RULE_ID" }, "effectiveFrom": "2023-02-23T00:00:00.000Z", "effectiveThrough": "2023-03-23T00:00:00.000Z" } }
Result
{
"data": {
"attachRewardEarnRuleToProduct": {
"__typename": "RewardRuleProductAttachment",
"cardProduct": {
"id": "CARD_PRODUCT_ID"
},
"rewardEarnRule": {
"id": "rer_abc123"
},
"effectiveFrom": "2023-02-23T00:00:00.000Z",
"effectiveThrough": "2023-03-23T00:00:00.000Z"
}
},
"extensions": {
"requestId": "REQUEST_ID",
"rateLimit": {
"cost": 12
}
}
}
Update reward earn rule
When updating the effectiveThrough date, the data must be now or in the future.
If a rule needs to be “deactivated” from earn reward points, the attachment’s effectiveThrough date can be updated to stop earning points at a given time.
Use the following mutation to update the attachment between the reward earn rule and the product in the Test environment:
UpdateRewardRuleAttachment
Query
mutation UpdateRewardRuleAttachment($input: UpdateRewardRuleAttachmentInput!) {
updateRewardRuleAttachment(input: $input) {
__typename
... on RewardRuleProductAttachment {
id
cardProduct {
id
}
rewardEarnRule {
id
}
effectiveFrom
effectiveThrough
}
... on UserError {
errors {
errorPath
code
description
}
}
... on AccessDeniedError {
message
}
}
}
Variables
{ "input": { "attachmentId": "ATTACHMENT_ID", "effectiveThrough": "2023-03-24T00:00:00.000Z" } }
Result
{
"data": {
"updateRewardRuleAttachment": {
"__typename": "RewardRuleProductAttachment",
"id": "ATTACHMENT_ID",
"cardProduct": {
"id": "CARD_PRODUCT_ID"
},
"rewardEarnRule": {
"id": "REWARD_EARN_RULE_ID"
},
"effectiveFrom": "2023-02-23T00:00:00.000Z",
"effectiveThrough": "2023-03-24T00:00:00.000Z"
}
},
"extensions": {
"requestId": "REQUEST_ID",
"rateLimit": {
"cost": 12
}
}
}
Find reward earn rule
You can query for a reward earn rule to display it in your website or application. You can query for a reward earn rule using the following methods:
- via reward earn rule ID
- via card product ID
- via organization ID
via reward earn rule ID
Use the following mutation to query for a reward earn rule using the reward earn rule ID:
FindRewardEarnRulesById
Query
query FindRewardEarnRulesById($id: ID!, $first: Int, $after: String) {
node(id: $id) {
__typename
... on RewardMerchantCategoryEarnRule {
id
type
name
attachments(first: $first, after: $after) {
__typename
... on RewardRuleAttachmentConnection {
edges {
node {
effectiveFrom
effectiveThrough
... on RewardRuleProductAttachment {
cardProduct {
id
}
}
}
}
}
}
rewardPointEarning {
rate
}
createdAt
allowedList
updatedAt
}
... on RewardDefaultEarnRule {
id
type
name
attachments {
__typename
... on RewardRuleAttachmentConnection {
edges {
node {
effectiveFrom
effectiveThrough
... on RewardRuleProductAttachment {
cardProduct {
id
}
}
}
}
}
}
rewardPointEarning {
rate
}
createdAt
updatedAt
}
}
}
Variables
{
"id": "REWARD_EARN_RULE_ID"
}
Result
{
"data": {
"createRewardMerchantCategoryEarnRule": {
"__typename": "RewardMerchantCategoryEarnRule",
"id": "REWARD_EARN_RULE_ID",
"type": "PER_TRANSACTION_SPEND_AMOUNT",
"name": "ruleName",
"attachments": {
"__typename": "RewardRuleAttachmentConnection",
"pageInfo": {
"hasNextPage": false
},
"edges": [
{
"node": {
"effectiveFrom": "2023-02-23T00:00:00.000Z",
"effectiveThrough": "2023-03-23T00:00:00.000Z",
"rewardEarnRule": {
"id": "REWARD_EARN_RULE_ID"
},
"cardProduct": {
"id": "CARD_PRODUCT_ID"
}
}
}
]
},
"rewardPointEarning": {
"rate": "1.5"
},
"createdAt": "2023-02-23T00:00:00.000Z",
"allowedList": [
"EATING_PLACES_RESTAURANTS",
"FAST_FOOD_RESTAURANTS"
],
"updatedAt": "2023-02-23T00:00:00.000Z"
}
},
"extensions": {
"requestId": "REQUEST_ID",
"rateLimit": {
"cost": 54
}
}
}
via product ID
Use the following mutation to query for a reward earn rule using your card product ID:
FindCardProductWithRewardRules
Query
query FindCardProductWithRewardRules($id: ID!) {
node(id: $id) {
__typename
... on CardProduct {
attachedRewardRules {
... on RewardRuleAttachmentConnection {
pageInfo {
startCursor
hasNextPage
}
edges {
node {
__typename
effectiveFrom
effectiveThrough
rewardEarnRule {
... on RewardMerchantCategoryEarnRule {
id
type
name
attachments {
__typename
... on RewardRuleAttachmentConnection {
edges {
node {
effectiveFrom
effectiveThrough
... on RewardRuleProductAttachment {
cardProduct {
id
}
}
}
}
}
}
rewardPointEarning {
rate
}
createdAt
allowedList
updatedAt
}
... on RewardDefaultEarnRule {
id
type
name
attachments {
__typename
... on RewardRuleAttachmentConnection {
edges {
node {
effectiveFrom
effectiveThrough
... on RewardRuleProductAttachment {
cardProduct {
id
}
}
}
}
}
}
rewardPointEarning {
rate
}
createdAt
updatedAt
}
}
}
}
}
}
}
}
}
Variables
{
"id": "CARD_PRODUCT_ID"
}
Result
{
"data": {
"node": {
"__typename": "CardProduct",
"id": "CARD_PRODUCT_ID",
"attachedEarnRules": {
"pageInfo": {
"hasNextPage": false
},
"edges": [
{
"cursor": "dD0yMDIzLTA4LTEwVDIxJTNBNDclM0ExNC42NDYzMDQ0MDFaJmk9Y3JwcHRfN2EzYWM5YTdiMmQ5NGZjYzllOWVkODFhODhhNWM3MzY",
"node": {
"__typename": "RewardMerchantCategoryEarnRule",
"id": "rer_abcdef",
"type": "PER_TRANSACTION_SPEND_AMOUNT",
"name": "ruleName",
"attachments": {
"__typename": "RewardRuleAttachmentConnection",
"pageInfo": {
"hasNextPage": false
},
"edges": [
{
"node": {
"effectiveFrom": "2023-02-23T00:00:00.000Z",
"effectiveThrough": "2023-03-23T00:00:00.000Z",
"rewardEarnRule": {
"id": "REWARD_EARN_RULE_ID"
},
"cardProduct": {
"id": "pd_def456"
}
}
}
]
},
"rewardPointEarning": {
"rate": "1.5"
},
"createdAt": "2023-02-23T00:00:00.000Z",
"allowedList": [
"EATING_PLACES_RESTAURANTS",
"FAST_FOOD_RESTAURANTS"
],
"updatedAt": "2023-02-23T00:00:00.000Z"
}
}
]
}
}
},
"extensions": {
"requestId": "REQUEST_ID",
"rateLimit": {
"cost": 54
}
}
}
via organization
Use the following mutation to query for a reward earn rule using your organization ID:
FindOrganizationWithRewardRules
Query
query FindOrganizationWithRewardRules($id: ID!) {
node(id: $id) {
__typename
... on Organization {
rewardEarnRules {
... on RewardEarnRuleConnection {
edges {
node {
__typename
... on RewardMerchantCategoryEarnRule {
id
type
name
attachments {
__typename
... on RewardRuleAttachmentConnection {
edges {
node {
effectiveFrom
effectiveThrough
... on RewardRuleProductAttachment {
cardProduct {
id
}
}
}
}
}
}
rewardPointEarning {
rate
}
allowedList
createdAt
updatedAt
}
... on RewardDefaultEarnRule {
id
type
name
attachments {
__typename
... on RewardRuleAttachmentConnection {
edges {
node {
effectiveFrom
effectiveThrough
... on RewardRuleProductAttachment {
cardProduct {
id
}
}
}
}
}
}
rewardPointEarning {
rate
}
createdAt
updatedAt
}
}
}
}
}
}
}
}
Variables
{
"id": "ORGANIZATION_ID"
}
Result
{
"data": {
"node": {
"__typename": "Organization",
"rewardEarnRules": {
"edges": [
{
"node": {
"__typename": "RewardMerchantCategoryEarnRule",
"id": "rer_abcdef",
"type": "PER_TRANSACTION_SPEND_AMOUNT",
"name": "ruleName",
"attachments": {
"__typename": "RewardRuleAttachmentConnection",
"pageInfo": {
"hasNextPage": false
},
"edges": [
{
"node": {
"effectiveFrom": "2023-02-23T00:00:00.000Z",
"effectiveThrough": "2023-03-23T00:00:00.000Z",
"cardProduct": {
"id": "CARD_PRODUCT_ID"
},
"rewardEarnRule": {
"id": "rer_abcdef"
}
}
}
]
},
"rewardPointEarning": {
"rate": "1.5"
},
"allowedList": [
"EATING_PLACES_RESTAURANTS",
"FAST_FOOD_RESTAURANTS"
],
"createdAt": "2023-02-23T00:00:00.000Z",
"updatedAt": "2023-02-23T00:00:00.000Z"
}
}
]
}
}
},
"extensions": {
"requested": "REQUEST_ID",
"rateLimit": {
"cost": 463
}
}
}