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

# Issue a reward

Issue a FLY reward from your app's wallet to a member. The transfer is
immediate and credited straight to the member's wallet.

Auth: API key in `X-API-Key`. The key must carry the `write:rewards` scope, and
your app's wallet must hold enough FLY to cover the amount.

<Warning>
  **Chef's warning** — rewards are irreversible. There is no refund once issued.
  The call is idempotent, though: replaying the same `idempotency_key` returns the
  reward you already issued instead of sending a second one, so retries are safe.
</Warning>

## Example

```bash theme={null}
curl -X POST "https://api.staging.blackbird.xyz/flynet/v1/issue_reward" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "{uuid}",
    "amount": { "value": "1000000000000000000", "currency": "FLY" },
    "description": "Loyalty streak reward",
    "idempotency_key": "reward-12345"
  }'
```

## Response

`201` on a new reward; `200` on an idempotent replay.

```json theme={null}
{
  "id": "{uuid}",
  "object": "reward",
  "user_id": "{uuid}",
  "amount": { "value": "1000000000000000000", "currency": "FLY" },
  "description": "Loyalty streak reward",
  "metadata": null,
  "created_at": "2026-06-21T18:18:31.078859Z"
}
```

| Field             | Type   | Notes                                                    |
| ----------------- | ------ | -------------------------------------------------------- |
| `id`              | UUID   | The reward id.                                           |
| `amount.value`    | string | FLY in wei (18-decimal). Send and read it as a string.   |
| `idempotency_key` | string | Replaying it returns the existing reward, not a new one. |

<Note>
  **Tasting note** — `amount.value` is FLY wei as a string: a 1 FLY reward is
  `"1000000000000000000"`. Your app's wallet must hold enough FLY; an insufficient
  balance is rejected, so top up before issuing.
</Note>
