---
title: "Top up the wallet (min EUR 5, max EUR 5,000; wallet cap EUR 20,000 without KYB t2)"
method: POST
path: "/v1/wallet/topup"
tags: ["wallet"]
---

# Top up the wallet (min EUR 5, max EUR 5,000; wallet cap EUR 20,000 without KYB t2)

`POST /v1/wallet/topup`

## Request

- Base URL: `https://api.portproof.org`
- URL: `https://api.portproof.org/v1/wallet/topup`
- Auth: one of:
  - API key in cookie `pp_session`
  - HTTP bearer

Same response shapes as checkout with `kind: topup`. Unused credit is refundable to the original method within 14 days.

## Request body

- object
  - `amount_cents` integer, required
  - `payment_method` 'stripe' | 'coingate' | 'nowpayments' | 'bank_transfer' | 'mock', required

## Response `201`

Default Response

- union
  - object
    - `topup` object, required
      - `id` string, required
      - `kind` 'topup', required
      - `amount_cents` integer, required
      - `currency` 'EUR' | 'USD', required
      - `provider` 'stripe' | 'coingate' | 'nowpayments' | 'bank_transfer' | 'mock', required
      - `provider_ref` string, required
      - `status` 'pending' | 'succeeded' | 'failed' | 'refunded' | 'expired', required
      - `created_at` string, date-time, required
    - `redirect_url` string, uri, required
    - `method` 'stripe', required
  - object
    - `topup` object, required
      - `id` string, required
      - `kind` 'topup', required
      - `amount_cents` integer, required
      - `currency` 'EUR' | 'USD', required
      - `provider` 'stripe' | 'coingate' | 'nowpayments' | 'bank_transfer' | 'mock', required
      - `provider_ref` string, required
      - `status` 'pending' | 'succeeded' | 'failed' | 'refunded' | 'expired', required
      - `created_at` string, date-time, required
    - `redirect_url` string, uri, required
    - `method` 'coingate', required
  - object
    - `topup` object, required
      - `id` string, required
      - `kind` 'topup', required
      - `amount_cents` integer, required
      - `currency` 'EUR' | 'USD', required
      - `provider` 'stripe' | 'coingate' | 'nowpayments' | 'bank_transfer' | 'mock', required
      - `provider_ref` string, required
      - `status` 'pending' | 'succeeded' | 'failed' | 'refunded' | 'expired', required
      - `created_at` string, date-time, required
    - `redirect_url` string, uri, required
    - `method` 'nowpayments', required
  - object
    - `topup` object, required
      - `id` string, required
      - `kind` 'topup', required
      - `amount_cents` integer, required
      - `currency` 'EUR' | 'USD', required
      - `provider` 'stripe' | 'coingate' | 'nowpayments' | 'bank_transfer' | 'mock', required
      - `provider_ref` string, required
      - `status` 'pending' | 'succeeded' | 'failed' | 'refunded' | 'expired', required
      - `created_at` string, date-time, required
    - `redirect_url` string, uri, required
    - `method` 'mock', required
  - object
    - `topup` object, required
      - `id` string, required
      - `kind` 'topup', required
      - `amount_cents` integer, required
      - `currency` 'EUR' | 'USD', required
      - `provider` 'stripe' | 'coingate' | 'nowpayments' | 'bank_transfer' | 'mock', required
      - `provider_ref` string, required
      - `status` 'pending' | 'succeeded' | 'failed' | 'refunded' | 'expired', required
      - `created_at` string, date-time, required
    - `bank` object, required
      - `iban` string, required
      - `bic` string, required
      - `beneficiary` string, required
      - `reference` string, required
      - `amount_cents` integer, required
      - `currency` 'EUR' | 'USD', required
      - `amount` string, required
    - `method` 'bank_transfer', required

## Other responses

- `400`: Default Response
- `401`: Default Response
- `402`: Default Response
- `403`: Default Response

---

[API](https://skmtc.dev/portproof/apis/portproof-api.md) · [All operations](https://skmtc.dev/portproof/apis/portproof-api/llms.txt) · [OpenAPI document](https://skmtc.dev/portproof/apis/portproof-api/revisions/4143916c0fac?raw)
