# Top up a Steam account wallet, paid from your Waxpeer balance

`POST /v1/steam-topup`

Debits `amount` from your Waxpeer balance and credits the Steam account after fees (`give_amount`). Passing the same `custom_id` twice returns the existing top-up instead of creating a second one, so retries are safe. Poll GET /v1/steam-topup for the final status: `canceled` means the money was returned to your balance.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `api` | query | string | required | Your [WAXPEER API](https://waxpeer.com/profile/user) |

## Request body

```json
{
  "steam_login": "gaben",
  "amount": 5000,
  "custom_id": "order-123"
}
```

## Example (curl)

```bash
curl -X POST 'https://api.waxpeer.com/v1/steam-topup?api=%7B%7BAPI_KEY%7D%7D' \
  -H 'Content-Type: application/json' \
  -d '{
  "steam_login": "gaben",
  "amount": 5000,
  "custom_id": "order-123"
}'
```

## Example response

```json
{
  "success": true,
  "msg": null,
  "topup": {
    "id": 812345,
    "custom_id": "order-123",
    "status": "completed",
    "amount": 5000,
    "give_amount": 4750,
    "steam_login": "gaben",
    "created": "2026-01-01T00:00:00.000Z",
    "updated": "2026-01-01T00:00:00.000Z"
  }
}
```

## Responses

- `200` Top-up state

## Notes for agents

- Auth is the query parameter `api`, not an Authorization header.
- See [/statuses.md](/statuses.md) for numeric trade status plus `escrow_status` / `release_date`.
- Prefer GET /v2/search-items-by-name over v1.
- Do not use GET /v1/ready-to-transfer-p2p; use the [trade websocket](/websocket.md).
