> For the complete documentation index, see [llms.txt](https://blufin360-api-documentation.gitbook.io/blufin360_api_documentation-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://blufin360-api-documentation.gitbook.io/blufin360_api_documentation-docs/banking/initiate-fund-transfer.md).

# Initiate fund transfer

Initiate a payout from a merchant account to a beneficiary via IMPS, NEFT, RTGS, or VPA (UPI).

The API includes:

* instant payout initiation
* IMPS / NEFT / RTGS / VPA modes
* Transaction ref & UTR tracking
* Internal & external transfers

**Endpoints**

**Staging :** <mark style="color:$primary;">`https://apidev.blufin360.com`</mark>

**Prod :** <mark style="color:$primary;">`https://api.blufin360.com`</mark>

**Path**

<mark style="color:$primary;">POST</mark> <mark style="color:$primary;"></mark><mark style="color:$primary;">`/api/v1/banking/fund-transfer`</mark>

**Authentication**

Use a JWT access token in the `Authorization` header.

Generate the token using [<mark style="color:$primary;">Generate JWT Access Token (Merchant Login API)</mark>](/blufin360_api_documentation-docs/getting-started/authentication.md). Generate the token using [<mark style="color:$primary;">Authentication</mark>](/blufin360_api_documentation-docs/getting-started/authentication.md).

### Example request

{% tabs %}
{% tab title="Shell" %}
{% code title="InitiateFundTransfer - cURL" %}

```bash
curl --location "https://api.blufin360.com/api/v1/banking/fund-transfer" \
  --header 'Authorization: Bearer <accessToken>' \
  --header 'Content-Type: application/json' \
  --data '{
    "api_request_id": "API_REQ_123",
    "merchant_ref_id": "ORD12345678",
    "payment_mode": "IMPS",
    "transfer_type": "EXTERNAL_FUND_TRANSFER",
    "account_id": "550e8400-e29b-41d4-a716-446655440000",
    "amount": 1250.50,
    "description": "Vendor payout April",
    "beneficiary_details": {
      "beneficiary_name": "Rohit Sharma",
      "account_number": "123456789012",
      "ifsc_code": "SBIN0123456",
      "beneficiary_email": "rohit@example.com",
      "beneficiary_mobile": "9876543210",
      "bank_name": "State Bank of India"
    }
  }'
```

{% endcode %}
{% endtab %}

{% tab title="Node" %}
{% code title="InitiateFundTransfer - fetch" %}

```javascript
const res = await fetch("https://api.blufin360.com/api/v1/banking/fund-transfer", {
  method: "POST",
  headers: {
    Authorization: "Bearer <accessToken>",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    api_request_id: "API_REQ_123",
    merchant_ref_id: "ORD12345678",
    payment_mode: "IMPS",
    transfer_type: "EXTERNAL_FUND_TRANSFER",
    account_id: "550e8400-e29b-41d4-a716-446655440000",
    amount: 1250.50,
    description: "Vendor payout April",
    beneficiary_details: {
      beneficiary_name: "Rohit Sharma",
      account_number: "123456789012",
      ifsc_code: "SBIN0123456",
      beneficiary_email: "rohit@example.com",
      beneficiary_mobile: "9876543210",
      bank_name: "State Bank of India",
    },
  }),
});
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}
{% code title="InitiateFundTransfer - fetch" %}

```python
import requests
resp = requests.post("https://api.blufin360.com/api/v1/banking/fund-transfer",
  headers={"Authorization":"Bearer <accessToken>","Content-Type":"application/json"},
  json={
    "api_request_id":"API_REQ_123", "merchant_ref_id":"ORD12345678",
    "payment_mode":"IMPS", "transfer_type":"EXTERNAL_FUND_TRANSFER",
    "account_id":"550e8400-e29b-41d4-a716-446655440000",
    "amount":1250.50, "description":"Vendor payout April",
    "beneficiary_details":{
      "beneficiary_name":"Rohit Sharma","account_number":"123456789012",
      "ifsc_code":"SBIN0123456","beneficiary_mobile":"9876543210"
    }
  })
print(resp.json())
```

{% endcode %}
{% endtab %}

{% tab title="Go" %}
{% code title="InitiateFundTransfer - net/http" %}

```go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"time"
)

// BeneficiaryDetails holds the beneficiary information for the payout.
type BeneficiaryDetails struct {
	BeneficiaryName   string `json:"beneficiary_name"`
	AccountNumber     string `json:"account_number"`
	IfscCode          string `json:"ifsc_code"`
	BeneficiaryEmail  string `json:"beneficiary_email"`
	BeneficiaryMobile string `json:"beneficiary_mobile"`
	BankName          string `json:"bank_name"`
}

// PayoutRequest represents the full JSON payload for the API call.
type PayoutRequest struct {
	APIRequestID      string             `json:"api_request_id"`
	MerchantRefID     string             `json:"merchant_ref_id"`
	PaymentMode       string             `json:"payment_mode"`
	TransferType      string             `json:"transfer_type"`
	AccountID         string             `json:"account_id"`
	Amount            float64            `json:"amount"`
	Description       string             `json:"description"`
	BeneficiaryDetails BeneficiaryDetails `json:"beneficiary_details"`
}

func main() {
	// Configuration
	endpoint := "https://api.blufin360.com/api/v1/banking/fund-transfer" 
	accessToken := "<accessToken>"                  
	// Build the request body
	reqBody := PayoutRequest{
		APIRequestID:  "API_REQ_123",
		MerchantRefID: "ORD12345678",
		PaymentMode:   "IMPS",
		TransferType:  "EXTERNAL_FUND_TRANSFER",
		AccountID:     "550e8400-e29b-41d4-a716-446655440000",
		Amount:        1250.50,
		Description:   "Vendor payout April",
		BeneficiaryDetails: BeneficiaryDetails{
			BeneficiaryName:   "Rohit Sharma",
			AccountNumber:     "123456789012",
			IfscCode:          "SBIN0123456",
			BeneficiaryEmail:  "rohit@example.com",
			BeneficiaryMobile: "9876543210",
			BankName:          "State Bank of India",
		},
	}

	// Marshal the struct into JSON
	jsonData, err := json.Marshal(reqBody)
	if err != nil {
		fmt.Printf("Error marshaling JSON: %v\n", err)
		return
	}

	// Create an HTTP client with a timeout
	client := &http.Client{
		Timeout: 30 * time.Second,
	}

	// Build the POST request
	req, err := http.NewRequest("POST", endpoint, bytes.NewBuffer(jsonData))
	if err != nil {
		fmt.Printf("Error creating request: %v\n", err)
		return
	}

	// Set headers
	req.Header.Set("Authorization", "Bearer "+accessToken)
	req.Header.Set("Content-Type", "application/json")

	// Execute the request
	resp, err := client.Do(req)
	if err != nil {
		fmt.Printf("Error executing request: %v\n", err)
		return
	}
	defer resp.Body.Close() // Ensure the body is closed after reading

	// Read the response body
	respBody, err := io.ReadAll(resp.Body)
	if err != nil {
		fmt.Printf("Error reading response: %v\n", err)
		return
	}

	// Print the response status and body
	fmt.Printf("Response status: %s\n", resp.Status)
	fmt.Printf("Response body: %s\n", string(respBody))
}
```

{% endcode %}
{% endtab %}

{% tab title="Java" %}
{% code title="InitiateFundTransfer - HttpClient (Java 11+)" %}

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers;

public class FundTransferClient {

    public static void main(String[] args) throws Exception {
        String endpoint = "https://api.blufin360.com/api/v1/banking/fund-transfer"; 
        String accessToken = "<accessToken>";
        String jsonPayload = buildJsonPayload();

        HttpClient httpClient = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(endpoint))
                .header("Authorization", "Bearer " + accessToken)
                .header("Content-Type", "application/json")
                .POST(BodyPublishers.ofString(jsonPayload))
                .build();

        HttpResponse<String> response = httpClient.send(request, BodyHandlers.ofString());

        System.out.println("Status Code: " + response.statusCode());
        System.out.println("Response Body: " + response.body());
    }
    private static String buildJsonPayload() {
        String beneficiaryDetails =
                "\"beneficiary_name\": \"Rohit Sharma\"," +
                "\"account_number\": \"123456789012\"," +
                "\"ifsc_code\": \"SBIN0123456\"," +
                "\"beneficiary_email\": \"rohit@example.com\"," +
                "\"beneficiary_mobile\": \"9876543210\"," +
                "\"bank_name\": \"State Bank of India\"";

        return "{" +
                "\"api_request_id\": \"API_REQ_123\"," +
                "\"merchant_ref_id\": \"ORD12345678\"," +
                "\"payment_mode\": \"IMPS\"," +
                "\"transfer_type\": \"EXTERNAL_FUND_TRANSFER\"," +
                "\"account_id\": \"550e8400-e29b-41d4-a716-446655440000\"," +
                "\"amount\": 1250.50," +
                "\"description\": \"Vendor payout April\"," +
                "\"beneficiary_details\": {" + beneficiaryDetails + "}" +
                "}";
    }
}
```

{% endcode %}
{% endtab %}

{% tab title="PHP" %}
{% code title="InitiateFundTransfer- cURL (PHP)" %}

```php
<?php
$url = "https://api.blufin360.com/api/v1/banking/fund-transfer";
$accessToken = "<accessToken>";
$data = [
    "api_request_id" => "API_REQ_123",
    "merchant_ref_id" => "ORD12345678",
    "payment_mode" => "IMPS",
    "transfer_type" => "EXTERNAL_FUND_TRANSFER",
    "account_id" => "550e8400-e29b-41d4-a716-446655440000",
    "amount" => 1250.50,
    "description" => "Vendor payout April",
    "beneficiary_details" => [
        "beneficiary_name" => "Rohit Sharma",
        "account_number" => "123456789012",
        "ifsc_code" => "SBIN0123456",
        "beneficiary_email" => "rohit@example.com",
        "beneficiary_mobile" => "9876543210",
        "bank_name" => "State Bank of India"
    ]
];

$jsonData = json_encode($data);

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $accessToken",
    "Content-Type: application/json"
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);


curl_close($ch);

if ($error) {
    echo "cURL Error: $error\n";
} else {
    echo "HTTP Status Code: $httpCode\n";
    echo "Response: $response\n";
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

### Headers

| Header        | Type     | Required | Description                   | Format                                 |
| ------------- | -------- | -------- | ----------------------------- | -------------------------------------- |
| Authorization | `string` | ✅        | Access token for auth         | Authorization: Bearer `<access_token>` |
| Content-Type  | `string` | ✅        | Specifies request body format | application/json                       |

### Request Payload

<pre class="language-json"><code class="lang-json"><strong>{
</strong><strong>  "api_request_id": "API_REQ_123",
</strong>  "merchant_ref_id": "ORD12345678",
  "payment_mode": "IMPS",
  "transfer_type": "EXTERNAL_FUND_TRANSFER",
  "account_id": "550e8400-e29b-41d4-a716-446655440000",
  "amount": 1250.50,
  "description": "Vendor payout April",
  "beneficiary_details": {
    "beneficiary_name": "Rohit Sharma",
    "account_number": "123456789012",
    "ifsc_code": "SBIN0123456",
    "beneficiary_email": "rohit@example.com",
    "beneficiary_mobile": "9876543210",
    "bank_name": "State Bank of India",
  }
}
</code></pre>

### Body

| Field               | Type      | Required | Description                                            |
| ------------------- | --------- | -------- | ------------------------------------------------------ |
| api\_request\_id    | `string`  | ✅        | Unique request ID (6–50 chars)                         |
| merchant\_ref\_id   | `string`  | ✅        | Unique merchant reference ID for tracking (6–50 chars) |
| payment\_mode       | `string`  | ✅        | `IMPS` / `NEFT` / `RTGS` / `VPA`                       |
| transfer\_type      | `string`  | ✅        | `INTERNAL_FUND_TRANSFER` or `EXTERNAL_FUND_TRANSFER`   |
| account\_id         | `UUID`    | ✅        | Merchant account identifier                            |
| amount              | `decimal` | ✅        | Transfer amount (up to 2 decimal places, must be > 0)  |
| description         | `string`  | ✅        | Transaction description (6–50 chars)                   |
| beneficiary details | `object`  | ✅        | Beneficiary information                                |

### Beneficiary\_details

| Field              | Type     | Required   | Description                                                         |
| ------------------ | -------- | ---------- | ------------------------------------------------------------------- |
| beneficiary name   | `string` | ✅          | Full name of the beneficiary                                        |
| account\_number    | `string` | ✅          | Bank account number (9–18 digits). Required for IMPS / NEFT / RTGS. |
| ifsc\_code         | `string` | ✅          | 11-char IFSC code. Required for IMPS / NEFT / RTGS.                 |
| beneficiary\_vpa   | `string` | ✅ when VPA | UPI VPA (e.g. `user@bank`). Required when `payment_mode` is `VPA`.  |
| beneficiary\_email | `string` | ✅          | Beneficiary email address                                           |
| beneficiary mobile | `string` | ✅          | Transfer amount (up to 2 decimal places, must be > 0)               |
| bank\_name         | `string` | ✅          | Name of beneficiary's bank                                          |
| account\_holder    | `object` | ✅          | Account holder name                                                 |

### Success Response — 200 (example)

```json
{
  "status": "success",
  "status_code": 200,
  "message": "Payout initiated successfully",
  "data": {
    "service_type": "PAYOUT",
    "service_subtype": "IMPS",
    "response_code": "TXN-1001",
    "response_message": "Transaction Initiated",
    "transaction_details": {
      "transaction_ref_id": "A1B2C3D4E5F6478899AA112233445566",
      "merchant_ref_id": "ORD12345678",
      "transaction_status": "INITIATED",
      "amount": 1250.50,
      "currency": "INR",
      "transaction_mode": "IMPS",
      "description": "Vendor payout April",
      "utr": null,
      "remarks": null,
      "transfer_type": "EXTERNAL_FUND_TRANSFER", 
      "created_at": "2026-04-16T10:15:30.123456+00:00"
    }
  },
  "detail": null
}
```

### Response Metadata

| Field               | Type      | Description                                                                 |
| ------------------- | --------- | --------------------------------------------------------------------------- |
| status              | `string`  | Indicates the overall result of the API call.                               |
| code / status\_code | `integer` | HTTP status code                                                            |
| message             | `string`  | A readable summary of the outcome (e.g. `"Payout initiated successfully"`). |
| data                | `object`  | Verification response payload                                               |

### Failure Response — <mark style="color:$danger;">400 / 422 / 500</mark>

| Field   | Type      | Description                                                                   |
| ------- | --------- | ----------------------------------------------------------------------------- |
| status  | `string`  | Indicates the overall result of the API call. Returns an `error` on failure.  |
| code    | `integer` | Error status code                                                             |
| message | `string`  | A readable summary of the outcome (e.g. `"Payout initiated unsuccessfully"`). |
| error   | `object`  | Error details                                                                 |

**Common Error**

{% hint style="warning" %}
Please rely on the **response\_code** field to determine the final outcome of the transaction. While the **transaction\_status** and **response\_message** provide a general indication.
{% endhint %}
