Get loyalty configuration

Retrieves the shop's loyalty configuration in the shape UpdateLoyaltyConfig accepts: display settings, bonus definitions, reward products with their status, every campaign (season) with its status, and the spend conversion table with the rate derived per currency. Product rewards are returned by SKU. Use it to verify a sync. This method accepts only the versioned x-stash-hmac-signature header, signed over an empty body; the legacy stash-hmac-signature header is rejected with HTTP 401 (UNAUTHENTICATED), because it carries no timestamp and a captured request could be replayed. Errors, by the HTTP status a REST caller receives and its gRPC status: 401 UNAUTHENTICATED when the signature is missing, invalid, outside the time window, sent in the legacy header, or names a different shop; fix the signing, because resending it unchanged does not help. 404 NOT_FOUND for an unknown shop or a shop with no loyalty program; it does not change on a retry. 501 UNIMPLEMENTED when the loyalty configuration API is not available; it does not change on a retry. 500 INTERNAL when Stash hits an internal error, for example reading the shop's loyalty configuration; reading is safe to repeat, so retry with backoff.

GET
/sdk/studio/{shopId}/loyalty/config
x-stash-hmac-signature<token>

Versioned HMAC-SHA256 signature authenticating server-to-server SDK requests (your backend calling Stash), as opposed to client-side SDK operations. Recommended over the deprecated X-Stash-Api-Key for the best security. Header format: v1;{appId};{unixMillisTimestamp};{base64Signature} (semicolon-delimited). {base64Signature} is the base64-encoded HMAC-SHA256 of the string {unixMillisTimestamp}.{requestBody} using your app ingress secret (the ingress secret is shown base64-encoded in Studio; base64-decode it to the raw bytes used as the HMAC key), where {requestBody} is the request body exactly as you send it for POST and PUT requests (the compact canonical request JSON is also accepted) and empty for GET requests. A signature over the exact bytes verifies for bodies of up to 18 KiB (18,432 bytes); a larger body may be refused with 401 even when correctly signed. The timestamp must be within 5 minutes of Stash server time. Your appId is your immutable app identifier, shown in Stash Studio under Project Settings > App details; your ingress secret is under Project Settings > API Secrets.

In: header

Path Parameters

shopId*string

Shop identifier from Stash Studio

Response Body

application/json

application/json

curl -X GET "https://example.com/sdk/studio/string/loyalty/config"
{  "displayConfig": {    "programName": "string",    "vipStoreName": "string"  },  "bonuses": [    {      "id": "string",      "type": "BONUS_TYPE_UNSPECIFIED",      "name": "string",      "pluralName": "string",      "abbreviatedName": "string",      "iconImageUrl": "string"    }  ],  "products": [    {      "sku": "string",      "name": "string",      "description": "string",      "imageUrl": "string",      "backgroundImageUrl": "string",      "status": "REWARD_PRODUCT_STATUS_UNSPECIFIED"    }  ],  "campaigns": [    {      "id": "string",      "name": "string",      "startAt": "2019-08-24T14:15:22Z",      "endAt": "2019-08-24T14:15:22Z",      "reset": {        "points": "POINTS_UNSPECIFIED",        "milestoneClaims": "MILESTONE_CLAIMS_UNSPECIFIED",        "currency": "CURRENCY_UNSPECIFIED"      },      "tiers": [        {          "id": "string",          "name": "string",          "startPoints": 0,          "iconUrl": "string",          "backgroundImageUrl": "string",          "color": "string",          "benefits": [            {              "text": "string"            }          ],          "earnRates": [            {              "bonusId": "string",              "rewardPerDollar": 0            }          ],          "milestones": [            {              "id": "string",              "name": "string",              "description": "string",              "pointsNeeded": 0,              "rewardName": "string",              "rewardImageUrl": "string",              "backgroundImageUrl": "string",              "bonusRewards": [                {                  "bonusId": "string",                  "amount": 0                }              ],              "productRewards": [                {                  "sku": "string",                  "quantity": 0                }              ]            }          ]        }      ],      "status": "CAMPAIGN_STATUS_UNSPECIFIED"    }  ],  "spendConversion": {    "tiers": [      {        "prices": {          "property1": "string",          "property2": "string"        }      }    ],    "ratesPerUsd": {      "property1": "string",      "property2": "string"    },    "updatedAt": "2019-08-24T14:15:22Z"  }}

How is this guide?