---
updatedAt: 2025-06-19T12:12:12.000Z
agentTools:
  projectIndex: https://docs.fiatrepublic.com/llms.txt
---

# Making Payouts

### Making Payouts

To process withdrawals for your users, you can make payouts from your Fiat Republic accounts, to the external bank accounts of your users.

> 📘 Currencies and Payment Schemes
>
> You can find more information about the supported currencies and payment schemes [here](https://docs.fiatrepublic.com/docs/currencies-and-schemes).

In order to make payouts, you will first need to create a Payee.\ <br/>

#### Step 1: Create a Payee for End Users

To create a new Payee using the API, you will need to use the [create Payee](https://docs.fiatrepublic.com/reference/create-payee) endpoint and provide the endUserId of the user for whom you wish to create a Payee.

> 📘 Required Fields for Bank Details
>
> The details required for creating a Payee will depend on the currency that you want to make payouts and receive payins in. More information on this can be seen [here](https://docs.fiatrepublic.com/docs/payee).

**POST Payees request example**

```curl POST Payees Request
curl --request POST \
     --url https://sandbox.fiatrepublic.com/api/v1/payees \
     --header 'Content-Type: application/json' \
     --data '
{
   "endUserId":"eus_2pjbyge1l2n0d9z8kl",
   "type":"PERSON",
   "name":"John Doe",
   "currency":"GBP",
   "address":null,
   "bankDetails":{
      "routingCodes":[
         {
            "type":"SORT_CODE",
            "value":"101000"
         }
      ],
      "accountNumber":"12345678"
   },
   "additionalDetails":null,
   "metadata":null
}
```
```json Response
{
    "id": "pye_5opkx8g1jl40lz4m3e",
    "owner": {
        "type": "END_USER",
        "id": "eus_2pjbyge1l2n0d9z8kl"
    },
    "type": "PERSON",
    "name": "John Doe",
    "currency": "GBP",
    "address": null,
    "paymentSchemes": [
        "FPS",
        "CHAPS"
    ],
    "bankDetails": {
        "routingCodes":[
         {
            "type":"SORT_CODE",
            "value":"101000"
         }
      ],
        "accountNumber": "12345678"
    },
    "additionalDetails": {},
    "createdAt": 1649937567871,
    "updatedAt": 1649937567871,
    "metadata": null,
    "status": "CREATED"
}
```

The response will contain a `paymentSchemes` field which indicates the [payment schemes](https://docs.fiatrepublic.com/docs/currencies-and-schemes) that can used to make a payment to this payee.

As this is an asynchronous process, the response will return a Payee object in a `CREATED` status. The Payee will become `ACTIVE` typically within a couple of seconds.

You can monitor the Payee's status using the [GET Payee](https://docs.fiatrepublic.com/reference/get-payee) endpoint or by consuming the `PAYEE.STATUS_UPDATED` event. In practice, you can simply check the Payee status before you make the first payment to it or add a 10 second delay between creating a new Payee and creating a payment to it.

<br />

#### Step 2: Create a Payment

You can now [create a payment](https://docs.fiatrepublic.com/reference/create-payment) from the End User's Virtual Account, to the Payee you created for them using the relevant [payment scheme](https://docs.fiatrepublic.com/docs/currencies-and-schemes).

**POST Payment request example**

```curl POST Payments Request
curl --request POST \
     --url https://sandbox.fiatrepublic.com/api/v1/payments \
     --header 'Content-Type: application/json' \
     --data '
{
   "from":{
      "id":"vac_5opkx8g1jo50lz4m3e",
      "type":"VIRTUAL_ACCOUNT"
   },
   "to":{
      "id":"pye_5opkx8g1jl40lz4m3e",
      "type":"PAYEE"
   },
   "reference":"Withdrawal",
   "amount":"1000",
   "paymentScheme":"FPS",
   "metadata":null
}
'
```
```json Response
{
    "id": "pmt_8ovyep1rebx0kx65n2",
    "from": {
        "id": "vac_5opkx8g1jo50lz4m3e",
        "type": "VIRTUAL_ACCOUNT"
    },
    "to": {
        "id": "pye_5opkx8g1jl40lz4m3e",
        "type": "PAYEE"
    },
    "direction": "PAYOUT",
    "reference": "Withdrawal",
    "amount": "1000.00",
    "currency": "GBP",
    "paymentScheme": "FPS",
    "status": "CREATED",
    "createdAt": 1649952068273,
    "updatedAt": 1649952068273,
    "metadata": null
}
```

> 📘 Payments from Virtual Accounts
>
> As with Payins, when you make a Payout from a Virtual Account the balance will be debited from the associated Master Fiat Account.
>
> While it is possible to make the payout directly from the Master Fiat Account, it is advisable to do so from the Virtual Account so you can easily keep track of all the payments for a particular user.

Once the request has been accepted, the payment status will be set to `CREATED` and ultimately transition to `COMPLETED`.

#### Step 3: Listen for the Payment Status Event

You can keep track of the changes in the status of the payment via the `PAYMENT.STATUS_UPDATED` event. More details of on the various statuses of a Payment can be found [here](https://docs.fiatrepublic.com/docs/payment).

**`PAYMENT.STATUS_UPDATED`event example**

```json PAYMENT.STATUS_UPDATED event
{
  "id": "evt_n5ev10g6oznm6vx5lo4azjdkl2",
  "event": "PAYMENT.STATUS_UPDATED",
  "data": {
    "id": "pmt_8ovyep1rebx0kx65n2",
    "from": {
      "id": "vac_5opkx8g1jo50lz4m3e",
      "type": "VIRTUAL_ACCOUNT"
    },
    "to": {
      "id": "pye_5opkx8g1jl40lz4m3e",
      "type": "PAYEE"
    },
    "direction": "PAYOUT",
    "reference": "Withdrawal",
    "amount": "1000.00",
    "currency": "GBP",
    "paymentScheme": "FPS",
    "status": "COMPLETED",
    "createdAt": 1649952068273000,
    "updatedAt": 1649952074395000,
    "metadata": null
  },
  "previousValues": {
    "id": "pmt_8ovyep1rebx0kx65n2",
    "status": "PROCESSING"
  },
  "createdAt": 1649952074498
}
```