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

# Transfer

> Give customers account details to transfer into and confirm on receipt.

**Ideal for**: Customers who prefer to move money from their own banking app. SeerBit generates an account number for the payment and confirms when the transfer lands.

This payment method allows your customers to make payments through bank transfer. SeerBit generates a bank account number for that specific payment, and confirms once the transfer lands.

> **Paying more than once?** This account exists for a single transaction. If the same customer will pay you repeatedly, reserve them a [virtual account](/online-payments/payment-features/virtual-account) instead — a permanent number they can save and pay into any time. See the [comparison](/online-payments/payment-features/virtual-account#virtual-account-or-bank-transfer).

## Before you use these endpoints

These endpoints are for merchants who want to **build their own checkout**. You collect the payment details in your own interface and send them to SeerBit, deciding for yourself how the payment experience looks.

If you would rather not build and maintain that, use [Simple Checkout](/online-payments/integrations/simple-checkout) or [Standard Checkout](/online-payments/integrations/standard-checkout) instead — SeerBit renders the payment interface, supports every method, and takes on the compliance burden.

### You calculate the fee, not SeerBit

The hosted checkout works out the transaction fee and shows it to the customer. **These endpoints do not.** SeerBit charges exactly the `amount` you send.

So if your dashboard is set so the **customer** bears the fee, you must calculate that fee and include it yourself. If you don't, the fee comes out of your settlement instead — you will receive less than you charged.

| Fee bearer | [Hosted checkout](/online-payments/integrations/standard-checkout#transaction-fees) | These endpoints |
| - | - | - |
| **Merchant** | Send your amount; the fee is deducted at settlement | Send your amount; the fee is deducted at settlement |
| **Customer** | Checkout adds the fee for you | **You add the fee yourself** |

Set the fee bearer in your dashboard settings, and see [transaction fees](/online-payments/integrations/standard-checkout#transaction-fees) for how the two models differ.

## How methods are selected

Every payment method uses the **same endpoint** — what changes is the `paymentType` you send and the extra fields that method needs.

```bash theme={null}
POST https://seerbitapi.com/api/v2/payments/initiates
```

| Method | `paymentType` | Extra fields |
| - | - | - |
| [Card](/payment-methods/card-payment) | `CARD` | `cardNumber`, `cvv`, `expiryMonth`, `expiryYear`, `pin` |
| [Transfer](/payment-methods/transfer) | `TRANSFER` | — |
| [USSD](/payment-methods/ussd-payment) | `USSD` | `bankCode` |
| [Mobile money](/payment-methods/mobile-money) | `MOMO` | `network`, `voucherCode` |
| [Bank account](/payment-methods/bank-account) | `ACCOUNT` | `clientAppCode`, `redirectUrl` |

## Authentication

All payment method calls are authenticated with a **bearer token**, generated from your public and secret keys.

```bash theme={null}
POST https://seerbitapi.com/api/v2/encrypt/keys
```

<Card title="Authentication" icon="key" href="/authentication#bearer-token">
  How to generate the token, and which credential every other SeerBit API expects.
</Card>

## Initialising a transfer Payment

For the full specification, see our [API Reference](/api-reference)

<Badge color="blue">POST</Badge>

```bash theme={null}
https://seerbitapi.com/api/v2/payments/initiates
```

### Request Sample

The code snippet below shows an example request for generating a bank account number to complete a payment

<CodeGroup>
  ```bash cURL theme={null}
  curl --location 'https://seerbitapi.com/api/v2/payments/initiates' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_ENCRYPTED_KEY' \
  --data-raw '{
      "publicKey":"YOUR_PUBLIC KEY",
      "amount":"100",
      "fullName": "Jane Doe",
      "mobileNumber": "0887522256",
      "email":"youremail@domain.com",
      "currency": "NGN",
      "country": "NG",
      "paymentReference": "dsffererer",
      "callbackUrl": "http://checkout-seerbit.surge.sh",
      "redirectUrl": "http://checkout-seerbit.surge.sh",
      "paymentType": "TRANSFER"
  }'
  ```

  ```javascript NODE theme={null}
  var request = require('request');
  var options = {
    method: 'POST',
    url: 'https://seerbitapi.com/api/v2/payments/initiates',
    headers: {
      'Content-Type': 'application/json',
      Authorization: 'Bearer YOUR_ENCRYPTED_KEY'
    },
    body: JSON.stringify({
      publicKey: 'YOUR_PUBLIC KEY',
      amount: '100',
      fullName: 'Jane Doe',
      mobileNumber: '0887522256',
      email: 'youremail@domain.com',
      currency: 'NGN',
      country: 'NG',
      paymentReference: 'dsffererer',
      callbackUrl: 'http://checkout-seerbit.surge.sh',
      redirectUrl: 'http://checkout-seerbit.surge.sh',
      paymentType: 'TRANSFER'
    })
  };
  request(options, function (error, response) {
    if (error) throw new Error(error);
    console.log(response.body);
  });
  ```

  ```php PHP theme={null}
  <?php

  $curl = curl_init();

  curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://seerbitapi.com/api/v2/payments/initiates',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS =>'{
      "publicKey":"YOUR_PUBLIC KEY",
      "amount":"100",
      "fullName": "Jane Doe",
      "mobileNumber": "0887522256",
      "email":"youremail@domain.com",
      "currency": "NGN",
      "country": "NG",
      "paymentReference": "dsffererer",
      "callbackUrl": "http://checkout-seerbit.surge.sh",
      "redirectUrl": "http://checkout-seerbit.surge.sh",
      "paymentType": "TRANSFER"

      }',
    CURLOPT_HTTPHEADER => array(
      'Content-Type: application/json',
      'Authorization: Bearer YOUR_ENCRYPTED_KEY'
    ),
  ));

  $response = curl_exec($curl);

  curl_close($curl);
  echo $response;
  ```
</CodeGroup>

### Response Sample

The code snippet below shows an example response showing bank account details

```json theme={null}
{
  "status": "SUCCESS",
  "data": {
    "code": "00",
    "payments": {
      "paymentReference": "dsfr55266tyt5554y166",
      "walletName": "SEERBIT(Merchant Name)",
      "wallet": "9979878249",
      "bankName": "Providus Bank",
      "accountNumber": "9979878249"
    },
    "message": "ACCOUNT OPENED SUCCESSFULLY"
  }
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.