---
title: "Simulate rewards"
method: POST
path: "/manager/loyalty/v1/{source}/rewards/simulate"
tags: ["manager_loyalty_endpoints"]
---

# Simulate rewards

`POST /manager/loyalty/v1/{source}/rewards/simulate`

## Request

- Base URL: `https://partners.tryotter.com`
- URL: `https://partners.tryotter.com/manager/loyalty/v1/{source}/rewards/simulate`
- Auth: OAuth 2
  - Authorization code: `/v1/auth/oauth2/authorize`
  - Client credentials
  - Token URL: `/v1/auth/token` scopes: `manager.loyalty`
- TypeScript: <https://skmtc.dev/cloudkitchens/apis/otter-api/docs/manager/loyalty/v1/:source/rewards/simulate/post.ts> (a function with typed inputs; its response is checked against the schema)

`Show what the effects will be after applying the selected rewards, and start the rewards transaction, only call this when user selected some reward, otherwise skip this call and use redeemAndAccumulateRewards API call.` Rate limit: 8 requests per minute.

## Path parameters

- `source` string, required: Loyalty provider source

## Headers

- `X-Store-Id` string, required: The unique identifier of the store in your app. This ID, along with the `Application ID`, will be used to match the correct store when performing operations. It cannot be longer than 255 characters and must only contain printable ASCII characters. During on-boarding, this ID will be similar to `onboarding:905bb725-b141-4a9b-832a-1f254f772c94` (where the UUID is the Internal Store ID). During off-boarding, this field will be filled with the last known Store ID, or with an empty string, in case none is found. In that case, please fall back to the provided `internalStoreId` (a.k.a. Sku-Sku ID).

## Request body

- SimulateRewardsRequest: Request body for SimulateRewards API call.
  - `userId` string, required: The id of the user.
  - `order` Order2, required
    - `id` string: The id of the order in the partner's system.
    - `currencyCode` string: Currency code.
    - `items` Item2[]: The ordered items in the order.
      - `id` string: The id of the item in the partner's system.
      - `displayName` string: Name of the item.
      - `quantity` number: Quantity of item ordered.
      - `price` number: Price of item.
      - `modifiers` Item2[]: The modifiers of an item, such as size(small, medium, large), modifier share the same model as item, just in case we have nested modifiers.
    - `totals` Totals
      - `subTotal` number: Order subtotal.
      - `tax` number: Order tax.
      - `discount` number: Order discount.
      - `total` number: Order total.
  - `selectedRewards` SelectedReward[], required: Selected rewards, currently only support one reward, if multiple rewards are passed it will throw an error.
    - `id` string: The ID of reward.
    - `amount` number: The amount that was deducted.
    - `menus` SelectedMenuReward: Indicates the item the user want to redeem, if reward type is MENUS, this should be present.
      - `entityId` string: The id of the selected item.

## Response `200`

Simulate rewards response.

- SimulateRewardsResponse: Response body for SimulateRewards API call.
  - `transactionId` string: The id of the transaction.
  - `rewardEffect` RewardEffect: Shows how much is deducted from total.
    - `subtotal` Subtotal
      - `amount` number: The amount that was discounted.

## Other responses

- `400`: The request is malformed.
- `401`: Invalid authorization.
- `403`: Authorization not valid for the requested resource.
- `422`: The request body is not valid.

---

[API](https://skmtc.dev/cloudkitchens/apis/otter-api.md) - [All operations](https://skmtc.dev/cloudkitchens/apis/otter-api/llms.txt) - [OpenAPI document](https://skmtc.dev/cloudkitchens/apis/otter-api/revisions/4c868194a467?raw)
