Description
# Resend Python SDK [](https://github.com/psf/black)  [](https://codecov.io/gh/drish/resend-py) [](https://opensource.org/licenses/MIT) [](https://pypi.org/project/resend/) [](https://pypi.org/project/resend) --- ## Installation To install Resend Python SDK, simply execute the following command in a terminal: ``` pip install resend ``` ## Setup First, you need to get an API key, which is available in the [Resend Dashboard](https://resend.com). ```py import resend import os resend.api_key = "re_yourkey" ``` ## Example You can get an overview about all parameters in the [Send Email](https://resend.com/docs/api-reference/emails/send-email) API reference. ```py import os import resend resend.api_key = "re_yourkey" params: resend.Emails.SendParams = { "from": "onboarding@resend.dev", "to": ["delivered@resend.dev"], "subject": "hi", "html": "<strong>hello, world!</strong>", "reply_to": "to@gmail.com", "bcc": "bcc@resend.dev", "cc": ["cc@resend.dev"], "tags": [ {"name": "tag1", "value": "tagvalue1"}, {"name": "tag2", "value": "tagvalue2"}, ], } email: resend.Emails.SendResponse = resend.Emails.send(params) print(email) ``` ## Async Support The SDK supports async operations via `httpx`. Install the async extra: ```bash pip install resend[async] ``` Once installed, async methods (suffixed with `_async`) work automatically — no extra setup needed: ```py import asyncio import resend resend.api_key = "re_yourkey" async def main(): params: resend.Emails.SendParams = { "from": "onboarding@resend.dev", "to": ["delivered@resend.dev"], "subject": "hi", "html": "<strong>hello, world!</strong>", } email: resend.Emails.SendResponse = await resend.Emails.send_async(params) print(email) if __name__ == "__main__": asyncio.run(main()) ``` ### Custom async client To use a custom async HTTP client or configure options like timeouts, set `resend.default_async_http_client`: ```py import resend resend.api_key = "re_yourkey" resend.default_async_http_client = resend.HTTPXClient(timeout=60) ```
Release History
| Version | Changes | Urgency | Date |
|---|---|---|---|
| 2.29.0 | Imported from PyPI (2.29.0) | Low | 4/21/2026 |
| v2.29.0 | ## What's Changed * feat(domains): add click_tracking and open_tracking to CreateParams by @rehanvdm in https://github.com/resend/resend-python/pull/200 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.28.1...v2.29.0 | High | 4/16/2026 |
| v2.28.1 | ## What's Changed * feat(domains): add TrackingCAA record support by @rehanvdm in https://github.com/resend/resend-python/pull/199 ## New Contributors * @rehanvdm made their first contribution in https://github.com/resend/resend-python/pull/199 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.28.0...v2.28.1 | High | 4/15/2026 |
| v2.28.0 | ## What's Changed * feat(domains): add custom click tracking support by @drish in https://github.com/resend/resend-python/pull/195 * feat: implement automations and events APIs by @drish in https://github.com/resend/resend-python/pull/197 * chore: bump version to 2.28.0 by @drish in https://github.com/resend/resend-python/pull/198 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.27.0...v2.28.0 | Medium | 4/13/2026 |
| v2.28.0a1 | ## What's Changed * feat(domains): add custom click tracking support by @drish in https://github.com/resend/resend-python/pull/195 * feat: implement automations and events APIs by @drish in https://github.com/resend/resend-python/pull/197 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.27.0...v2.28.0a1 | Medium | 4/11/2026 |
| v2.27.0 | ## What's Changed * chore(deps): update codecov/codecov-action action to v6 by @renovate[bot] in https://github.com/resend/resend-python/pull/193 * feat(logs): add logs API support by @drish in https://github.com/resend/resend-python/pull/194 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.26.0...v2.27.0 | Medium | 4/1/2026 |
| v2.26.0 | ## What's Changed * feat: Async Support with httpx 🔥 by @drish in https://github.com/resend/resend-python/pull/149 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.25.0...v2.26.0 | Low | 3/20/2026 |
| v2.25.0 | ## What's Changed * `headers` to return mime data, and http_headers returns API data (ie: rate limit) - to avoid collision by @drish in https://github.com/resend/resend-python/pull/192 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.24.0...v2.25.0 | Low | 3/18/2026 |
| v2.24.0 | ## What's Changed * feat(api-keys): add last_used_at field to API key response by @drish in https://github.com/resend/resend-python/pull/190 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.23.0...v2.24.0 | Low | 3/16/2026 |
| v2.23.0 | ## What's Changed * feat: add headers to all responses + ResendError by @drish in https://github.com/resend/resend-python/pull/179 * chore: bump version to 2.23.0 by @drish in https://github.com/resend/resend-python/pull/189 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.22.0...v2.23.0 | Low | 2/23/2026 |
| v2.22.0 | ## What's Changed * chore(deps): update python docker tag to v3.14.3 by @renovate[bot] in https://github.com/resend/resend-python/pull/183 * feat: add support data method on responses by @drish in https://github.com/resend/resend-python/pull/184 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.21.0...v2.22.0 | Low | 2/16/2026 |
| v2.21.0 | ## What's Changed * feat: add rate limit error class by @drish in https://github.com/resend/resend-python/pull/178 * chore(deps): update actions/checkout action to v6 by @renovate[bot] in https://github.com/resend/resend-python/pull/180 * chore(deps): update python docker tag to v3.14.2 by @renovate[bot] in https://github.com/resend/resend-python/pull/168 * feat: support for send/scheduled_at in broadcasts by @drish in https://github.com/resend/resend-python/pull/181 * chore: bump to v2.21. | Low | 1/22/2026 |
| v2.19.0 | ## What's Changed * feat: Implement the beta Topics API by @drish in https://github.com/resend/resend-python/pull/172 * feat: Inbound by @drish in https://github.com/resend/resend-python/pull/170 * feat: initial webhooks API support by @drish in https://github.com/resend/resend-python/pull/173 * feat: make new attachments API conform to updated spec by @lucasfcosta in https://github.com/resend/resend-python/pull/174 * feat: Impl templates API by @drish in https://github.com/resend/resend-py | Low | 10/31/2025 |
| v2.18.0 | - Webhooks Support (https://github.com/resend/resend-python/pull/173) **Full Changelog**: https://github.com/resend/resend-python/compare/v2.17.0...v2.18.0 | Low | 10/29/2025 |
| v2.17.0 | ## What's Changed * chore(deps): update actions/checkout action to v5 by @renovate[bot] in https://github.com/resend/resend-python/pull/156 * chore(deps): update codecov/codecov-action action to v5 by @renovate[bot] in https://github.com/resend/resend-python/pull/125 * feat: Add html/text columns for broadcasts by @drish in https://github.com/resend/resend-python/pull/169 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.16.0...v2.17.0 | Low | 10/14/2025 |
| v2.16.0 | ## What's Changed * feat: Add emails list method with pagination by @drish in https://github.com/resend/resend-python/pull/162 * chore(deps): update python docker tag to v3.13.7 by @renovate[bot] in https://github.com/resend/resend-python/pull/148 * chore(deps): update actions/setup-python action to v6 by @renovate[bot] in https://github.com/resend/resend-python/pull/161 * chore: Bump to v2.16.0 by @drish in https://github.com/resend/resend-python/pull/167 **Full Changelog**: https://gi | Low | 10/8/2025 |
| v2.15.0 | - chore: Bump version to 2.15.0 - feat: Optional pagination list methods **Full Changelog**: https://github.com/resend/resend-python/compare/v2.14.0...v2.15.0 | Low | 10/8/2025 |
| v2.14.0 | ## What's Changed * feat: Batch validation mode by @drish in https://github.com/resend/resend-python/pull/163 * chore: Bump to v2.14.0 by @drish in https://github.com/resend/resend-python/pull/164 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.13.1...v2.14.0 | Low | 9/20/2025 |
| v2.13.1 | ## What's Changed * example: rm inline_content_id ref by @drish in https://github.com/resend/resend-python/pull/157 * fix: wrong response types for creation methods by @gabrielmfern in https://github.com/resend/resend-python/pull/158 * fix: wrong return types for creation methods by @drish in https://github.com/resend/resend-python/pull/159 * chore: Bump to v2.13.1 by @drish in https://github.com/resend/resend-python/pull/160 ## New Contributors * @gabrielmfern made their first contribut | Low | 8/26/2025 |
| v2.13.0 | ## What's Changed * feat: Prefer content_id instead of inline_content_id by @drish in https://github.com/resend/resend-python/pull/154 * chore: Bump to v2.13.0 by @drish in https://github.com/resend/resend-python/pull/155 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.12.0...v2.13.0 | Low | 8/13/2025 |
| v2.12.0 | ## What's Changed * feat: Inline attachment support by @drish in https://github.com/resend/resend-python/pull/152 * chore: Bump to v2.12.0 by @drish in https://github.com/resend/resend-python/pull/153 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.11.0...v2.12.0 | Low | 8/6/2025 |
| v2.11.0 | ## What's Changed * chore(deps): update python docker tag to v3.13.4 by @renovate in https://github.com/resend/resend-python/pull/147 * feat: Add support for custom http clients by @drish in https://github.com/resend/resend-python/pull/146 * chore: Bump to v2.11.0 by @drish in https://github.com/resend/resend-python/pull/151 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.10.0...v2.11.0 | Low | 7/10/2025 |
| v2.10.0 | ## What's Changed * feat: Idempotency key support for batch send by @drish in https://github.com/resend/resend-python/pull/142 * feat: Support for custom_return_path by @drish in https://github.com/resend/resend-python/pull/143 * chore: Bump to v2.10.0 by @drish in https://github.com/resend/resend-python/pull/144 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.9.0...v2.10.0 | Low | 5/15/2025 |
| v2.9.0 | ## What's Changed * feat: Get contact by email by @drish in https://github.com/resend/resend-python/pull/140 * chore: Bump to v2.9.0 by @drish in https://github.com/resend/resend-python/pull/141 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.8.0...v2.9.0 | Low | 5/6/2025 |
| v2.8.0 | ## What's Changed * chore(deps): update python docker tag to v3.13.3 by @renovate in https://github.com/resend/resend-python/pull/137 * feat: Add support for Idempotecy key header by @drish in https://github.com/resend/resend-python/pull/138 * chore: Bump to v2.8.0 by @drish in https://github.com/resend/resend-python/pull/139 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.7.0...v2.8.0 | Low | 4/27/2025 |
| v2.7.0 | ## What's Changed * chore(deps): update python docker tag to v3.13.2 by @renovate in https://github.com/resend/resend-python/pull/133 * feat: Add support for broadcast update by @drish in https://github.com/resend/resend-python/pull/135 * chore: Bump to v2.7.0 by @drish in https://github.com/resend/resend-python/pull/136 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.6.0...v2.7.0 | Low | 3/25/2025 |
| v2.6.0 | ## What's Changed * feat: Update contact by email or id by @drish in https://github.com/resend/resend-python/pull/131 * chore: Bump to v2.6.0 by @drish in https://github.com/resend/resend-python/pull/132 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.5.1...v2.6.0 | Low | 1/23/2025 |
| v2.5.1 | ## What's Changed * fix: Wrong broadcast pkg init file by @drish in https://github.com/resend/resend-python/pull/130 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.5.0...v2.5.1 | Low | 12/17/2024 |
| v2.5.0 | ## What's Changed * update requirements - typing_extensions should be at least 4.4.0 by @drish in https://github.com/resend/resend-python/pull/120 * Added __version__ in __init__.py by @rosaboyle in https://github.com/resend/resend-python/pull/126 * chore: Drop python 3.7 (reached EOL) from test matrix by @drish in https://github.com/resend/resend-python/pull/128 * feat: Broadcasts endpoints by @drish in https://github.com/resend/resend-python/pull/127 ## New Contributors * @rosaboyle ma | Low | 12/17/2024 |
| v2.4.0 | ## What's Changed * feat: Scheduled emails, cancel and update by @drish in https://github.com/resend/resend-python/pull/118 https://pypi.org/project/resend/2.4.0/ **Full Changelog**: https://github.com/resend/resend-python/compare/v2.3.0...v2.4.0 | Low | 8/14/2024 |
| v2.3.0 | ## What's Changed * fix: gracefully handle non json responses by @drish in https://github.com/resend/resend-python/pull/112 * chore: Bump to v2.3.0 by @drish in https://github.com/resend/resend-python/pull/116 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.2.0...v2.3.0 | Low | 7/24/2024 |
| v2.2.0 | ## What's Changed * feat: add content_type attribute to Attachment by @drish in https://github.com/resend/resend-python/pull/113 * chore: Bump to v2.2.0 by @drish in https://github.com/resend/resend-python/pull/114 **Full Changelog**: https://github.com/resend/resend-python/compare/v2.1.0...v2.2.0 | Low | 7/5/2024 |
| v2.1.0 | ## What's Changed *better testing setup by @pedroimpulcetto in https://github.com/resend/resend-python/pull/106 * fix: updating the api url reference for errors page by @pedroimpulcetto in https://github.com/resend/resend-python/pull/108 * Use Generic on Request class by @pedroimpulcetto in https://github.com/resend/resend-python/pull/107 * feat: support for domain TLS option by @drish in https://github.com/resend/resend-python/pull/110 **Full Changelog**: https://github.com/resend/rese | Low | 6/10/2024 |
| v2.0.0 | ## What's Changed * fixed type hints by @drish in https://github.com/resend/resend-python/pull/102 * Chore/email auxiliary types by @pedroimpulcetto in https://github.com/resend/resend-python/pull/103 * chore: Bump to v2.0.0 by @drish in https://github.com/resend/resend-python/pull/104 **Full Changelog**: https://github.com/resend/resend-python/compare/v1.2.0...v2.0.0 | Low | 5/27/2024 |
| v1.2.0 | ## What's Changed * fix: ci badge by @drish in https://github.com/resend/resend-python/pull/90 * feat: creating a type alias to union different types by @pedroimpulcetto in https://github.com/resend/resend-python/pull/92 * Feat/request literal verb by @pedroimpulcetto in https://github.com/resend/resend-python/pull/87 * chore: Make requests>=2.31 by @drish in https://github.com/resend/resend-python/pull/99 * feat: Support from attr by @drish in https://github.com/resend/resend-python/pull/1 | Low | 5/24/2024 |
| v1.1.0 | ## What's Changed * fix: add `from_` option to send params by @drish in https://github.com/resend/resend-python/pull/88 * chore: bump to v1.1.0 by @drish in https://github.com/resend/resend-python/pull/89 **Full Changelog**: https://github.com/resend/resend-python/compare/v1.0.2...v1.1.0 | Low | 5/17/2024 |
| v1.0.2 | ## What's Changed * feat: expose types for returned data by @drish in https://github.com/resend/resend-python/pull/85 * chore: bump to v1.0.2 by @drish in https://github.com/resend/resend-python/pull/86 **Full Changelog**: https://github.com/resend/resend-python/compare/v1.0.1...v1.0.2 | Low | 5/14/2024 |
| v1.0.1 | ## What's Changed * fix: use find_packages for setup.py by @drish in https://github.com/resend/resend-python/pull/84 **Full Changelog**: https://github.com/resend/resend-python/compare/v1.0.0...v1.0.1 | Low | 5/9/2024 |
| v1.0.0 | ## What's Changed * major release with type hinting support by @drish @pedroimpulcetto in https://github.com/resend/resend-python/pull/82 **Full Changelog**: https://github.com/resend/resend-python/compare/v0.8.0...v1.0.0 | Low | 5/9/2024 |
| v0.8.0 | ## What's Changed * feat: Impl Domains#update by @drish in https://github.com/resend/resend-python/pull/67 * chore: Bump to v0.8.0 by @drish in https://github.com/resend/resend-python/pull/69 **Full Changelog**: https://github.com/resend/resend-python/compare/v0.7.2...v0.8.0 | Low | 3/6/2024 |
| v0.7.2 | ## What's Changed * Fix Contacts `list` method by @thedatadavis in https://github.com/resend/resend-python/pull/63 * chore: Bump to v0.7.2 by @drish in https://github.com/resend/resend-python/pull/64 ## New Contributors * @thedatadavis made their first contribution in https://github.com/resend/resend-python/pull/63 **Full Changelog**: https://github.com/resend/resend-python/compare/v0.7.1...v0.7.2 | Low | 1/18/2024 |
| v0.7.1 | ## What's Changed * fix: Better handling for contact#delete by @drish in https://github.com/resend/resend-python/pull/62 **Full Changelog**: https://github.com/resend/resend-python/compare/v0.7.0...v0.7.1 | Low | 1/15/2024 |
| v0.7.0 | ## What's Changed * Resend API url Exposed as a configuration item by @BenjaminX in https://github.com/resend/resend-python/pull/55 * feat: Impl Audiences API by @drish in https://github.com/resend/resend-python/pull/59 * feat: Impl contacts API by @drish in https://github.com/resend/resend-python/pull/60 ## New Contributors * @BenjaminX made their first contribution in https://github.com/resend/resend-python/pull/55 **Full Changelog**: https://github.com/resend/resend-python/compare/v | Low | 1/10/2024 |
| v0.6.0 | ## What's Changed * example: Add base64 attachment example by @drish in https://github.com/resendlabs/resend-python/pull/43 * fixed key import by @0PandaDEV in https://github.com/resendlabs/resend-python/pull/45 * example: Add example on how to send html file as attachment by @drish in https://github.com/resendlabs/resend-python/pull/46 * feat: Add Batch send by @drish in https://github.com/resendlabs/resend-python/pull/52 * chore: Bump to v0.6.0 by @drish in https://github.com/resendlabs/r | Low | 10/21/2023 |
| v0.5.2 | ## What's Changed * feat: Standardize User Agent by @zenorocha in https://github.com/resendlabs/resend-python/pull/40 * chore: Bump to v0.5.2 by @drish in https://github.com/resendlabs/resend-python/pull/41 ## New Contributors * @zenorocha made their first contribution in https://github.com/resendlabs/resend-python/pull/40 **Full Changelog**: https://github.com/resendlabs/resend-python/compare/v0.5.1...v0.5.2 | Low | 7/25/2023 |
| v0.5.1 | ## What's Changed * chore: bump to v0.5.1 by @drish in https://github.com/resendlabs/resend-python/pull/39 **Full Changelog**: https://github.com/resendlabs/resend-python/compare/v0.5.0...v0.5.1 | Low | 6/14/2023 |
| v0.4.0 | ## What's Changed * readme/example: fixed typo by @avelino in https://github.com/resendlabs/resend-python/pull/22 * style: increase flake8 line length by @drish in https://github.com/resendlabs/resend-python/pull/25 * api: change print to warn by @avelino in https://github.com/resendlabs/resend-python/pull/23 * Fix API key assignment by @khryniewicz in https://github.com/resendlabs/resend-python/pull/27 * feat: impl get domain by @drish in https://github.com/resendlabs/resend-python/pull/29 | Low | 5/20/2023 |
| v0.3.0 | ## What's Changed * refactor: fix error handler by @drish in https://github.com/resendlabs/resend-python/pull/17 * refactor: updates sdk usage method by @drish in https://github.com/resendlabs/resend-python/pull/18 * feat: api keys support by @drish in https://github.com/resendlabs/resend-python/pull/19 * feat: support domains by @drish in https://github.com/resendlabs/resend-python/pull/20 **Full Changelog**: https://github.com/resendlabs/resend-python/compare/v0.2.0...v0.3.0 | Low | 5/2/2023 |
| v0.2.0 | ## What's Changed * Configure Renovate by @renovate in https://github.com/resendlabs/resend-python/pull/9 * feat: add docker compose by @drish in https://github.com/resendlabs/resend-python/pull/10 * chore: update cfg github url by @drish in https://github.com/resendlabs/resend-python/pull/11 * feat: attachments support by @drish in https://github.com/resendlabs/resend-python/pull/13 ## New Contributors * @renovate made their first contribution in https://github.com/resendlabs/resend-pyt | Low | 4/26/2023 |
| v0.1.1 | ## What's Changed * renamed to resend by @drish in https://github.com/drish/resend-py/pull/3 * setup.py: fix issue with required_python by @drish in https://github.com/drish/resend-py/pull/8 **Full Changelog**: https://github.com/drish/resend-py/compare/v0.1.0...v0.1.1 | Low | 4/19/2023 |
| v0.1.0 | **Full Changelog**: https://github.com/drish/klotty-py/compare/v0.0.1...v0.1.0 | Low | 12/9/2022 |
