# Idempotent sends: the SendOptions argument

```python
import resend

params: resend.Emails.SendParams = {
    "from": "[SENDER]",
    "to": ["[RECIPIENT]"],
    "subject": "Welcome",
    "html": "&lt;strong&gt;it works!&lt;/strong&gt;",
}

options: resend.Emails.SendOptions = {
    "idempotency_key": "welcome-user/[USER-ID]",
}

resend.Emails.send(params, options)
```

## The rules, from the docs

- Include a key on any send you might retry, so the same request processed twice
  still sends once.
- The key must be unique per API request. Namespace it by the business event:
  `welcome-user/[USER-ID]`, not a constant.
- Keys expire after 24 hours. A retry three days later is a new send.
- Maximum length is 256 characters.

## Checklist

- The option name is `idempotency_key` (snake_case) in Python, `idempotencyKey`
  in Node. Mixing the cases silently drops the key in the Python SDK.
- It is the second positional argument to `resend.Emails.send`, not part of
  the params dict.
- On retry-after-timeout, reuse the SAME key. Generating a fresh key per
  attempt is the most common way to defeat idempotency.