# Get Refund

> Retrieve an invoice refund by its withdrawal ID, inspect its status and on-chain hash, and reconcile completion.

`GET /v1/refunds/:withdrawal_id`

:::endpoint
GET /v1/refunds/:withdrawal_id
:::

**API key:** `Payment`

Returns the current state of an invoice refund by its `withdrawal_id` (`wdr_...`). Once the payout reaches `completed`, the response includes the confirmed `tx_hash` and `explorer_url`.

## Response (200 OK)

```json
{
  "withdrawal_id": "wdr_6Qm2fK8xR4vN7cT1bY9dL5",
  "invoice_id": "inv_7K2M9P4Q8R1X5Z3A0bC2dE",
  "mode": "full",
  "external_order_id": "refund-1042-full",
  "status": "completed",
  "is_final": true,
  "is_test": false,
  "amount": "100.00",
  "fee": "1.00",
  "currency": "USDT",
  "network": "TRC20",
  "destination_address": "TN3W4H6rK2ce4vX9YnFQHwKENnHjoxb3m9",
  "first_sender": "TN3W4H6rK2ce4vX9YnFQHwKENnHjoxb3m9",
  "tx_hash": "9f3b8c2a1d0e4f6789abc123def4567890abc123def4567890abc123def45678",
  "explorer_url": "https://tronscan.org/#/transaction/9f3b8c2a1d0e4f6789abc123def4567890abc123def4567890abc123def45678",
  "created_at": 1767225600,
  "completed_at": 1767225932,
  "type": "refund",
  "project_id": "prj_3F9xL2mN8pQ4rT6vW1yZ5b"
}
```

## Refund statuses

| Status | Description | Terminal |
|--------|-------------|----------|
| `created` | Refund created and balance reserved, awaiting signing | No |
| `signed` | Transaction signed and broadcast to the blockchain | No |
| `pending_review` | Broadcast transaction was not confirmed within TTL; awaiting operator resolution | No |
| `cancelling` | Operator issued an on-chain cancellation; awaiting confirmation of which transaction lands | No |
| `completed` | Refund confirmed on-chain and delivered to `first_sender` (`is_final: true`) | Yes |
| `failed` | Refund failed before settlement or was abandoned; reserved funds returned to merchant balance | Yes |
| `cancelled` | Refund was cancelled before broadcast; reserved funds returned to merchant balance | Yes |

## Errors

A Payout (`rk_`) key is rejected with `403 payment_key_required`. If `withdrawal_id` does not exist, belongs to a regular withdrawal rather than a refund, or belongs to a project outside your key's scope, the endpoint returns `404 withdrawal_not_found`. See [Error Codes](/docs/errors/codes.md).
