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

# Payout Transaction

> Customize or approve payout transactions before they are processed

<CardGroup cols={2}>
  <Card title="Pre-Balance Check" icon="wallet" href="/docs/products/terminals/terminal-actions/balance-check">
    Intercept balance check requests to apply validation or custom logic.
  </Card>
</CardGroup>

<CodeGroup>
  ```json Request theme={null}
  {
  	"action_type" : "pre-payout-auth",
  	"action_id" : "d4cb8f5b-8ae5-432e-82c8-c17d6607bf2c",
  	"version": "v1.1.0",
  	"data" : {
  		"terminal" : {
  			"terminalId" : "2KUD1234",
  			"serialNo" : "91201008993212",
  			"pin": "0000",
  			"signature": "plainKeyPassedByUserAndHashedWithMerchantSecretKey"
  		},
  		"transaction" : {
  			"amount": 5000,
  			"currency": "NGN",
  			"source": "pos",
  			"type": "transfer",
  			"customerBillerId": "",
  			"productId": "",
  			"billerAccountName": ""
  			"rrn": "***"
  		},
  		"account" : {
  			"balance": 5000,
  			"currency": "NGN",
  			"id": "9ee1586d-3b14-4fcc-b9cf-4226d50f26de"
  		}
  	}
  }
  ```

  ```json Response theme={null}
  {
  	"data": {
  		"transaction": {
  			"shouldActionProceed": true,
  			"reasonCode": "00"
  		}
  	}
  }
  ```
</CodeGroup>

#### Passed Data Object

<ParamField body="action_type" type="string" required>
  The type of terminal action to perform (e.g., `pre-payout-auth`).
</ParamField>

<ParamField body="action_id" type="string" required>
  A unique identifier for this terminal action request.
</ParamField>

<ParamField body="version" type="string" required>
  API version to use (e.g., `v1.1.0`).
</ParamField>

<ParamField body="data" type="object" required>
  Contains the terminal, transaction, and account data for evaluation.

  <Expandable title="data.terminal" defaultOpen="true">
    <ParamField body="terminal.terminalId" type="string" required>
      Unique identifier for the terminal.
    </ParamField>

    <ParamField body="terminal.serialNo" type="string" required>
      Serial number of the terminal.
    </ParamField>

    <ParamField body="terminal.pin" type="string" required>
      PIN entered by the user.
    </ParamField>

    <ParamField body="terminal.signature" type="string" required>
      HMAC signature generated using the merchant's secret key.
    </ParamField>
  </Expandable>

  <Expandable title="data.transaction" defaultOpen="true">
    <ParamField body="transaction.amount" type="number" required>
      The payout amount.
    </ParamField>

    <ParamField body="transaction.currency" type="string" required>
      Currency code (e.g., `NGN`).
    </ParamField>

    <ParamField body="transaction.source" type="string" required>
      Origin of the transaction (e.g., `pos`).
    </ParamField>

    <ParamField body="transaction.type" type="string" required>
      Type of transaction (e.g., `transfer`).
    </ParamField>

    <ParamField body="transaction.customerBillerId" type="string">
      Customer's biller identifier (if applicable).
    </ParamField>

    <ParamField body="transaction.productId" type="string">
      Identifier for the product involved in the transaction.
    </ParamField>

    <ParamField body="transaction.billerAccountName" type="string">
      Name on the biller account.
    </ParamField>

    <ParamField body="transaction.rrn" type="string" required>
      Retrieval Reference Number used to trace the transaction.
    </ParamField>
  </Expandable>

  <Expandable title="data.account" defaultOpen="true">
    <ParamField body="account.balance" type="number" required>
      Current account balance.
    </ParamField>

    <ParamField body="account.currency" type="string" required>
      Currency of the account balance.
    </ParamField>

    <ParamField body="account.id" type="string" required>
      Account ID.
    </ParamField>
  </Expandable>
</ParamField>

***

#### Expected response

<ResponseField name="data" type="object" required>
  Contains the decision outcome for the transaction.

  <Expandable title="data.transaction" defaultOpen="true">
    <ResponseField name="shouldActionProceed" type="boolean" required>
      Indicates whether the terminal should proceed with the payout.
    </ResponseField>

    <ResponseField name="reasonCode" type="string" required>
      Response code explaining the decision (e.g., `00` for success).
    </ResponseField>
  </Expandable>
</ResponseField>

***

<Note>
  `reasonCode` is a standard response identifier used in the Terminal Action API to communicate the outcome of a custom logic check. To see all of the supported reason code [check here](/docs/products/terminals/terminal-actions/introduction#reason-code-list).
</Note>
