> ## Documentation Index
> Fetch the complete documentation index at: https://walletapi.oppigames.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Reward

> This API is triggered when the player rewarded with a bonus or jackpot.

```http theme={null}
  POST  /transaction/reward
```

## Functionality

The endpoint called when the player rewarded.

* The Operator is expected to increase player's balance by reward amount and return a new balance.
* **bonus reward** has refTransactionId which is reference identifier of bonus. Before any altering of player's balance, Operator has to check that reward wasn't processed before.
* **jackpot reward** has refTransactionId which is reference identifier of jackpot.

Finally, it returns the updated balance, reflecting the result of the reward.

## Headers

<ParamField header="x-api-key" type="string" required>
  A unique identifier associated with operator calling API.
</ParamField>

<ParamField header="x-signature" type="string" required>
  A SHA256 HMAC signature generated using the request body and timestamp.
  Format: HMAC\_SHA256(JSON.stringify(data) + '|' + timestamp), signed using the
  provided secret key.
</ParamField>

<ParamField header="x-timestamp" type="string" required>
  An Unix timestamp (milliseconds) when the request was sent. Ensure the same
  value is used in signature generation.
</ParamField>

<ParamField header="content-type" type="string" required>
  Must be set to `application/json`
</ParamField>

## Request Body

<ParamField body="transactionId" type="string" required>
  The unique transaction identifier. An action with same transactionId shouldn't be processed more than once.
</ParamField>

<ParamField body="refTransactionId" type="string" required>
  A reference identifier for the reward transaction.

  **Bonus reward** → bonus ID which given to operator at bonus configure api.

  **Jackpot reward** → jackpot ID which given to operator at jackpot configure api.
</ParamField>

<ParamField body="sessionId" type="string" required>
  An unique identifier for the session.
</ParamField>

<ParamField body="rewardType" type="string" required>
  Type of reward granted to the player.

  **Allowed Types**: jackpot, bonus
</ParamField>

<ParamField body="playerId" type="string" required>
  An unique identifier for the player.
</ParamField>

<ParamField body="gameId" type="string" required>
  An unique identifier for the game.
</ParamField>

<ParamField body="rewardedAmount" type="number" required>
  An amount rewarded to the player.

  <Note>
    To maintain precision and avoid floating-point errors, the balance field is processed as an integer value by multiplying the actual amount by `100000`.

    For example, a balance of `12.34567` will be represented as `1234567` in the API.
  </Note>
</ParamField>

## Response

<ResponseField name="status" type="string" required>
  Code indicates status of the request weather it is succeed or failed. We have listed error codes <a href="/introduction#error-codes">here</a>
</ResponseField>

<ResponseField name="transactionId" type="string" required>
  An ID of an action that is generated for each of our calls to the Operator, used to sync OppiGame and Operator sides for debugging purposes. The Operator has to respond with the same transactionId as the one received in request.
</ResponseField>

<ResponseField name="balance" type="number" required>
  The updated balance of the player.

  <Note>
    To maintain precision and avoid floating-point errors, the balance field is processed as an integer value by multiplying the actual amount by `100000`.

    For example, a balance of `12.34567` will be represented as `1234567` in the API.
  </Note>
</ResponseField>

<RequestExample>
  ```bash Shell theme={null}
  curl --request POST \
    --url 'https://partner-platform-url/transaction/reward' \
    --header 'content-type: application/json' \
    --header 'x-api-key: <x-api-key>' \
    --header 'x-signature: <x-signature>' \
    --header 'x-timestamp: <x-timestamp>' \
    --data '{
      "transactionId": "fef840b7-bdcf-4b7b-aa70-67da78d8d0c1",
      "refTransactionId": "ef461780-99e4-4205-8d3c-1d873e6db75b",
      "sessionId": "f1dfc865-584c-4cba-a175-06172b2a41141731504451691"
      "rewardType": "bonus",
      "playerId": "18865671",
      "gameId": "G1720767064793",
      "rewardedAmount": 25700000
  }'
  ```

  ```javascript NodeJS theme={null}
  const axios = require('axios');

  const url = 'https://partner-platform-url/transaction/reward';
  const headers = {
      'content-type': 'application/json',
      'x-api-key': '<x-api-key>',
      'x-signature': '<x-signature>',
      'x-timestamp': '<x-timestamp>'
  };
  const data = {
      transactionId: "fef840b7-bdcf-4b7b-aa70-67da78d8d0c1",
      refTransactionId: "ef461780-99e4-4205-8d3c-1d873e6db75b",
      sessionId: "f1dfc865-584c-4cba-a175-06172b2a41141731504451691",
      rewardType: "bonus",
      playerId: "18865671",
      gameId: "G1720767064793",
      rewardedAmount: 25700000
  };

  axios.post(url, data, { headers })
      .then(response => {
          console.log(response.data);
      })
      .catch(error => {
          console.error(error);
      });

  ```

  ```python Python theme={null}
  import requests

  url = "https://partner-platform-url/transaction/reward"
  headers = {
      "content-type": "application/json",
      "x-api-key": "<x-api-key>",
      "x-signature": "<x-signature>",
      "x-timestamp": "<x-timestamp>"
  }
  data = {
      "transactionId": "fef840b7-bdcf-4b7b-aa70-67da78d8d0c1",
      "refTransactionId": "ef461780-99e4-4205-8d3c-1d873e6db75b",
      "sessionId": "f1dfc865-584c-4cba-a175-06172b2a41141731504451691",
      "rewardType": "bonus",
      "playerId": "18865671",
      "gameId": "G1720767064793",
      "rewardedAmount": 25700000
  }

  response = requests.post(url, headers=headers, json=data)
  print(response.json())
  ```

  ```php PHP theme={null}
  <?php
  $curl = curl_init();

  curl_setopt_array($curl, [
    CURLOPT_URL => "https://partner-platform-url/transaction/reward",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
      "content-type: application/json",
      "x-api-key: <x-api-key>",
      "x-signature: <x-signature>",
      "x-timestamp: <x-timestamp>"
    ],
    CURLOPT_POSTFIELDS => json_encode([
      "transactionId" => "fef840b7-bdcf-4b7b-aa70-67da78d8d0c1",
      "refTransactionId" => "ef461780-99e4-4205-8d3c-1d873e6db75b",
      "sessionId" => "f1dfc865-584c-4cba-a175-06172b2a41141731504451691"
      "rewardType" => "bonus",
      "playerId" => "18865671",
      "gameId" => "G1720767064793",
      "rewardedAmount" => 25700000
    ]),
  ]);

  $response = curl_exec($curl);
  curl_close($curl);

  echo $response;
  ?>
  ```
</RequestExample>

<ResponseExample>
  ```json SUCCESS theme={null}
  {
    "status": "RS_OK",
    "transactionId": "fef840b7-bdcf-4b7b-aa70-67da78d8d0c1",
    "balance": 525700000,
  }
  ```

  ```json FAILURE theme={null}
  {
    "status": "RS_ERROR",
    "message": "Oops! Something went wrong. Please refresh the page or try again in a moment"
  }
  ```
</ResponseExample>
