# Top-ups

A top-up is the reverse of a [payout](/docs/payouts): it increases your PayPro balance instead of withdrawing from it. Top-ups can be created in multiple ways:

- Through the [PayPro Dashboard](https://app.paypro.nl/betalingen/saldo_opwaarderen/new)
- With the [Top-ups API](/reference/api/top-ups)


We will now discuss how to create a Top-up with our [Top-ups API](/reference/api/top-ups).

## Creating a Top-up

A Top-up is a resource in our API. Create one by calling the [Top-up create endpoint](/reference/api/top-ups/createtopup) with an `amount` and `currency`. You can optionally supply a `pay_method` (`ideal`, `bancontact` or `bank-transfer`) and a `locale`:

PHP
```php
$top_up = $paypro->topUps->create(
  [
    'amount' => 10000,
    'currency' => 'EUR'
  ]
);
```

Ruby
```ruby
client = PayPro::Client.new('pp_...')

top_up = client.top_ups.create(
  amount: 10000,
  currency: 'EUR'
)
```

A top-up has a unique ID, which can be useful as a payment reference when doing a manual bank transfer. Once the top-up is paid, your PayPro balance is automatically increased by its amount. You can also supply `metadata` to store your own data alongside the top-up, which is returned when you fetch the top-up again.

## Listen for Webhook Events

Just like payments, top-ups are paid asynchronously. To stay informed about status changes we recommend implementing our [Webhooks](/reference/webhooks). You can subscribe to the following top-up events:

- `topup.created`
- `topup.started`
- `topup.canceled`
- `topup.paid`
- `topup.failed`
- `topup.expired`


For more details on how to set up and manage webhooks, visit the [webhooks page](/reference/webhooks).