Python
Changelog
Every release of the package, newest first.
0.0.1
The first release. It covers the whole TypeScript SDK as it stood at 0.0.8, plus the changes queued after it: 430 methods in 41 namespaces, each under its TypeScript name in snake_case. A parity check proves that every one of them sends exactly the request its TypeScript twin sends, once with no options and once with every option set.
OpenEmailandAsyncOpenEmailhave an attribute for every namespace, fromemails,threadsandtemplatestoprovider_imports,dns_connectionsandaccount.listAllislist_all,getActiveisget_active, andtempMailistemp_mail.- A request body is a dict whose keys keep the API’s camelCase names, the options of a call are snake_case keyword arguments such as
idempotency_key=andlimit=, and a response comes back as a dict. Every body and result has aTypedDictinopenemail.types, named as in TypeScript. AsyncOpenEmailhas the same methods with the same arguments, awaited, and runs on asyncio and on trio.- Every paginated resource has
listfor one page,list_allfor every item as a list, anditerate, which yields items and fetches the next page only when it gets there. - An API refusal raises
OpenEmailApiError, withstatus,type,code,paramandrequest_id, andis_validation,is_not_found,is_rate_limited,is_step_up_required,is_retryableand the other checks. No response at all raisesOpenEmailNetworkError, withis_timeoutwhen the deadline passed. from openemail import openemailis a ready-made client built fromOPENEMAIL_API_KEYthe first time it is touched, andinitconfigures it once at startup.create_temp_mailandcreate_async_temp_mailopen disposable inboxes with no credential.access_token=takes an OAuth access token or a function that returns one, called before every request.verify_webhook_signaturechecks a delivery in constant time and returns the parsed event.client.raw.requestreaches an endpoint no method wraps yet.- Reads are retried on 408 and 5xx, and a 429 only when it carries
Retry-After.timeoutbounds the whole attempt, the response body included, and a credential is never sent over plain HTTP except to a server on this machine. - It needs Python 3.10 or newer, and depends only on
httpx,anyioandtyping-extensions.