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

# Fund member wallet

> Initiate a payment to fund a member's wallet

Initiates a payment to fund a member's wallet (the member is identified by `id` in the path). The member's wallet is credited with `amount`, while the payer is charged `totalCharge` (`amount` plus the processor fee).

This is the member-scoped twin of the [organisation funding](/docs/api-reference/endpoint/Wallet/fund-wallet). The wallet credited is the member's, not your organisation's. The member must already belong to your organisation — an accepted invitation — or the request is rejected with `403`.

There is no token purchase here. To fund and invest in one flow, use [Fund and Invest](/docs/api-reference/endpoint/Members/fund-invest) instead.

When `paymentMethod` is `bank_transfer` and `currency` is `NGN`, the response returns a virtual account to transfer to. For every other payment method, the response returns a Flutterwave payment link to complete the payment.

<ParamField path="id" type="string" required>
  The member's user ID.
</ParamField>

<RequestExample>
  ```json theme={null}
  {
      "amount": 1000000,
      "currency": "NGN",
      "redirectUrl": "https://google.com",
      "paymentMethod": "bank_transfer"
  }
  ```
</RequestExample>

<ParamField body="amount" type="integer" required>
  The amount to credit to the member's wallet. Must be ≥ 1.
</ParamField>

<ParamField body="currency" type="string" required>
  The funding currency. One of `NGN`, `USD`, `KES`, `GHS`, `ZAR`, `GBP`, `EUR`.
</ParamField>

<ParamField body="redirectUrl" type="string">
  URL to redirect to after payment. Required unless `paymentMethod` is `bank_transfer`.
</ParamField>

<ParamField body="paymentMethod" type="string" required>
  The payment method to use. One of `card`, `bank_transfer`, `ussd`, `mobilemoney`. Defaults to `card`.
</ParamField>

<ResponseExample>
  ```json theme={null}
  {
      "status": "success",
      "message": "Payment initiated successfully. Complete payment to fund this member's wallet.",
      "data": {
          "paymentMethod": "bank_transfer",
          "reference": "GETXN_FI_WX6FLTAVVNVGWG_PMCKDU_1",
          "email": "wilpat45677@yopmail.com",
          "virtualAccount": {
              "bankName": "Mock Bank",
              "accountNumber": "0067100155",
              "amount": "1002000.00",
              "note": "Mock note",
              "expiresAt": "2026-07-04 12:32:36 PM"
          },
          "amountToPay": 1002000,
          "amount": 1000000,
          "currency": "NGN",
          "fees": {
              "flutterwave": 2000,
              "total": 2000
          },
          "totalCharge": 1002000
      }
  }
  ```

  ```json Payment link — card, ussd, mobilemoney theme={null}
  {
      "status": "success",
      "message": "Payment initiated successfully. Complete payment to fund this member's wallet.",
      "data": {
          "paymentLink": "https://checkout.flutterwave.com/v3/hosted/pay/1a2b3c4d5e6f",
          "reference": "GETXN_FI_WX6FLTAVVNVGWG",
          "amount": 1000000,
          "currency": "NGN",
          "fees": {
              "flutterwave": 14000,
              "total": 14000
          },
          "totalCharge": 1014000
      }
  }
  ```

  ```json Not your member — 403 theme={null}
  {
      "status": "failed",
      "message": "This member does not belong to your organisation."
  }
  ```
</ResponseExample>

## After the payment

The payer comes back to your `redirectUrl` with the outcome appended as query parameters:

```
?status=successful&tx_ref=GETXN_FI_WX6FLTAVVNVGWG&transaction_id=10459445
?status=cancelled&tx_ref=GETXN_FI_KGBW0Y3O2W2GNN
```

That `status` travels through the browser, so treat it as a hint. Take the `tx_ref` and call
[`GET api/transactions/{reference}`](/docs/api-reference/endpoint/Transactions/get-transaction) for the
real outcome, and to know whether the member's wallet has been credited yet.

The [`wallet.funded`](/docs/api-reference/endpoint/Webhook/wallet-funded) webhook fires to your organisation once the credit is processed, with the member as the `user`.

## Errors

| HTTP | Message (example)                                                                                | When                                                           |
| ---- | ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------- |
| 400  | `child "Amount" fails because ["Amount" must be larger than or equal to 1]`                      | `amount` below 1, or not a number.                             |
| 400  | `child "Currency" fails because ["Currency" must be one of [NGN, USD, KES, GHS, ZAR, GBP, EUR]]` | Unsupported/invalid currency.                                  |
| 400  | `child "Redirect URL" fails because ["Redirect URL" is required]`                                | `redirectUrl` omitted for a non-`bank_transfer` method.        |
| 403  | `This member does not belong to your organisation.`                                              | `id` is a real user, but not one of your members.              |
| 404  | `This member does not exist.`                                                                    | Invalid `id`.                                                  |
| 502  | `Failed to create virtual account`                                                               | Flutterwave rejected the virtual-account or payment-link call. |
