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

# Make a payout

> Learn how to initiate a payout request.

<Info>
  To use the Payout APIs in a live or production environment, Novac Payment uses IP whitelisting to grant access.\
  You’ll need to contact <b>[support@novacpayment.com](mailto:support@novacpayment.com)</b> to request access for your IP address.
</Info>

## Overview

The payout flow describes the complete process of sending funds from your Novac account to a customer’s settlement account.\
It ensures that every payout is validated, securely processed, and easily verifiable.

To initiate a payout, your integration follows this flow:

## How payout flow works

```mermaid theme={null}
    sequenceDiagram
    participant C as Customer
    participant S as Your System
    participant N as Novac API

    C->>S: Initiates payout request
    S->>N: GET /api/v1/banks/{countryCode}<br/>Fetch supported banks
    N-->>S: Returns bank list
    S-->>C: Display banks

    C->>S: Submit account number & select bank
    S->>N: POST /api/v1/banks/account/verify<br/>{accountNumber, bankCode}
    N-->>S: Returns account owner name
    S-->>C: Display account name for confirmation

    Note over C,S: Optional: Check balance

    C->>S: Confirm payout
    S->>N: GET /api/v1/balance/{currency}<br/>(Optional)
    N-->>S: Returns available balance

    S->>N: POST /api/v1/transfers<br/>{amount, account, bank, ...}
    N->>N: Process payout
    N-->>S: Returns transaction reference

    S-->>C: Display transaction reference

    Note over C,S: Optional: Verify transaction

    C->>S: Request transaction status
    S->>N: GET /api/v1/transfers/{reference}
    N-->>S: Returns transaction status
    S-->>C: Display status
```

<Steps>
  <Step title="Fetch Supported Banks">
    Retrieve the list of banks supported for payouts, filtered by country code. You'll need the correct bank code from this list to verify a recipient's account and to initiate a payout.

    <Warning>
      Using an incorrect or unsupported bank code will cause later steps to fail.
    </Warning>
  </Step>

  <Step title="Verify the Recipient's Bank Account">
    Before sending money, confirm the recipient's account number resolves to a valid, correctly named account at the selected bank. This step returns the account holder's name so you can display it back to your user for confirmation.
  </Step>

  <Step title="Check Your Balance (Optional)">
    Optionally check your available balance before initiating a payout, to confirm you have sufficient funds. This step is optional because the payout request itself will fail gracefully with an insufficient-funds error if your balance is too low.
  </Step>

  <Step title="Initiate the Payout">
    Send the actual payout request, specifying the verified recipient account, bank code, and amount. A successful call here doesn't necessarily mean the money has arrived. It means the payout has been accepted and is being processed. You'll receive a reference to track its status.
  </Step>

  <Step title="Verify the Transaction Status">
    Use the reference returned in the previous step to check whether the payout completed successfully, failed, or is still processing. Because payouts can take time to settle on the recipient's end, this is typically the step you'll listen for via webhook.
  </Step>
</Steps>

### Get supported payout banks based on country

When a customer initiates a payout request, your system begins by fetching the list of supported banks from Novac by sending a [GET request](/api-reference/payouts/retrieve-payout-banks) to the endpoint `/api/v1/banks/{countryCode}`.

<Info>
  You can pass NG, GH and KE as your country code, as Novac support payout on Nigeria, Ghana and Kenya.
</Info>

This allows you to display the available banks for the customer to select from.

***

### Verify customer settlement account

After the customer selects a destination bank and enters their account number, your system should verify the account details by making a [POST request](/api-reference/payouts/verify-bank-account) to `/api/v1/banks/account/verify`.

This verification confirms that the account exists and returns the account holder’s name, which can then be displayed to the customer for confirmation.

Before proceeding with the payout, your system can optionally check the available balance by sending a [GET request](/api-reference/payouts/retrieve-balance) to `/api/v1/balance/{currency}` to ensure sufficient funds.

***

### Initiate a payout request

Once the customer confirms the payout, your system sends a [POST request](/api-reference/payouts/initiate-transfer) to `/api/v1/transfers`, including the payout details such as the amount, bank, and account information.

Novac processes the transaction and returns a unique transaction reference, which your system can display to the customer as proof of submission.

Finally, to verify the payout’s completion, your system can send a [GET request](/api-reference/payouts/retrieve-bank-transaction) to `/api/v1/transfers/{reference}` using the transaction reference returned earlier.

This endpoint provides the current transaction status such as "pending", "successful", or "failed" allowing your system to communicate the result back to the customer.

This complete flow ensures that every payout is securely processed, verified, and transparently tracked from initiation to confirmation.
