> ## Documentation Index
> Fetch the complete documentation index at: https://docs.puplar.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Idempotency

> Retry without charging twice

Payouts and payments reject a duplicate `reference` with `409`. Refunds use the original transaction id and replay the existing refund.

## Payouts — `reference`

```bash theme={"theme":{"light":"min-light","dark":"poimandres"}}
curl -X POST https://api.puplar.com/payouts \
  -H "Authorization: Bearer sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "wd_order_98234",
    "amount": 500000,
    "currency": "ngn",
    "method": "bank_transfer",
    "destination": {
      "currency": "ngn",
      "bank_transfer": {
        "account_number": "0123456789",
        "bank_code": "058",
        "account_name": "ADA OBI"
      }
    }
  }'
```

Same `reference` → `409` (not a replay). Look up with `GET /payouts/{reference}`. Use a stable id per operation (`wd-<order>`). A new reference is a new payout.

Payments work the same way (`GET /payments/{reference}`).

| Endpoint         | Key         | Duplicate |
| ---------------- | ----------- | --------- |
| `POST /payouts`  | `reference` | `409`     |
| `POST /payments` | `reference` | `409`     |
