SDK Python
PyPI: coffeemail v0.1.0Referência completa do pacote oficial coffeemail para Python (PyPI). Suporte síncrono e assíncrono (FastAPI/asyncio), modelos Pydantic v2, retorno seguro data, error e método .unwrap().
Buscando a documentação para Node.js ou TypeScript? Acesse a referência oficial do pacote @coffeemail/node.
Instalação
pypi.org/project/coffeemail ↗1. Cliente Síncrono (Django, Flask, Celery)
Suporte a clientes síncronos (CoffeeMail) e assíncronos (AsyncCoffeeMail). A API Key é carregada automaticamente da variável de ambiente COFFEEMAIL_API_KEY se omitida.
CoffeeMail(api_key: str | None = None, *, timeout: float = 10.0, locale: Locale = "pt-BR")2. Cliente Assíncrono (FastAPI, asyncio, Temporal)
Suporte a clientes síncronos (CoffeeMail) e assíncronos (AsyncCoffeeMail). A API Key é carregada automaticamente da variável de ambiente COFFEEMAIL_API_KEY se omitida.
AsyncCoffeeMail(api_key: str | None = None, *, timeout: float = 10.0, locale: Locale = "pt-BR")Desempacotamento de Tupla (Recomendado)
Padrão Idiomático SeguroTodas as operações retornam uma instância de CoffeeMailResponse[T] permitindo desempacotar data, error diretamente ou invocar .unwrap() para lançar exceções capturáveis.
Método .unwrap() (Estilo Exceção)
Try / ExceptTodas as operações retornam uma instância de CoffeeMailResponse[T] permitindo desempacotar data, error diretamente ou invocar .unwrap() para lançar exceções capturáveis.
Validação Criptográfica de Webhooks
O utilitário Webhooks.verify_signature valida a assinatura HMAC SHA-256 no header x-coffeemail-signature contra adulteração de payloads.
Emails
.send()
Assinatura Síncrona:client.emails.send(payload: SendEmailPayload | dict) -> CoffeeMailResponse[SendEmailResponse]Assinatura Assíncrona:await async_client.emails.send(payload: SendEmailPayload | dict) -> CoffeeMailResponse[SendEmailResponse]Envia um e-mail transacional de forma síncrona ou assíncrona.
.send_batch()
Assinatura Síncrona:client.emails.send_batch(emails: list[SendEmailPayload | dict]) -> CoffeeMailResponse[BatchSendEmailResult]Assinatura Assíncrona:await async_client.emails.send_batch(emails: list[SendEmailPayload | dict]) -> CoffeeMailResponse[BatchSendEmailResult]Envia múltiplos e-mails em um único lote otimizado.
.get()
Assinatura Síncrona:client.emails.get(email_id: str) -> CoffeeMailResponse[EmailDetail]Assinatura Assíncrona:await async_client.emails.get(email_id: str) -> CoffeeMailResponse[EmailDetail]Consulta detalhes, status de entrega e timestamps de um e-mail.
.list()
Assinatura Síncrona:client.emails.list(limit: int | None = None, after: str | None = None, status: str | None = None) -> CoffeeMailResponse[ListEmailsResponse]Assinatura Assíncrona:await async_client.emails.list(limit: int | None = None, after: str | None = None, status: str | None = None) -> CoffeeMailResponse[ListEmailsResponse]Lista e-mails recentes com suporte a paginação e filtros de status.
.cancel()
Assinatura Síncrona:client.emails.cancel(email_id: str) -> CoffeeMailResponse[dict[str, object]]Assinatura Assíncrona:await async_client.emails.cancel(email_id: str) -> CoffeeMailResponse[dict[str, object]]Cancela um e-mail agendado antes do disparo.
Domínios
.create()
Assinatura Síncrona:client.domains.create(name: str) -> CoffeeMailResponse[CreateDomainResponse]Assinatura Assíncrona:await async_client.domains.create(name: str) -> CoffeeMailResponse[CreateDomainResponse]Registra um novo domínio remetente e retorna registros DNS obrigatórios.
.verify()
Assinatura Síncrona:client.domains.verify(domain_id: str) -> CoffeeMailResponse[DomainDetail]Assinatura Assíncrona:await async_client.domains.verify(domain_id: str) -> CoffeeMailResponse[DomainDetail]Executa a verificação ativa dos registros SPF, DKIM, DMARC e MX.
.list()
Assinatura Síncrona:client.domains.list() -> CoffeeMailResponse[ListDomainsResponse]Assinatura Assíncrona:await async_client.domains.list() -> CoffeeMailResponse[ListDomainsResponse]Lista os domínios configurados para a organização.
.get()
Assinatura Síncrona:client.domains.get(domain_id: str) -> CoffeeMailResponse[DomainDetail]Assinatura Assíncrona:await async_client.domains.get(domain_id: str) -> CoffeeMailResponse[DomainDetail]Obtém detalhes e status de propagação de um domínio.
.delete()
Assinatura Síncrona:client.domains.delete(domain_id: str) -> CoffeeMailResponse[dict[str, object]]Assinatura Assíncrona:await async_client.domains.delete(domain_id: str) -> CoffeeMailResponse[dict[str, object]]Remove um domínio remetente cadastrado.
Modelos
.create()
Assinatura Síncrona:client.templates.create(payload: CreateTemplatePayload | dict) -> CoffeeMailResponse[TemplateDetail]Assinatura Assíncrona:await async_client.templates.create(payload: CreateTemplatePayload | dict) -> CoffeeMailResponse[TemplateDetail]Cadastra um modelo de e-mail com variáveis dinâmicas.
.preview()
Assinatura Síncrona:client.templates.preview(payload: PreviewTemplatePayload | dict) -> CoffeeMailResponse[PreviewTemplateResponse]Assinatura Assíncrona:await async_client.templates.preview(payload: PreviewTemplatePayload | dict) -> CoffeeMailResponse[PreviewTemplateResponse]Gera pré-visualização HTML do template com dados simulados.
.list()
Assinatura Síncrona:client.templates.list() -> CoffeeMailResponse[list[TemplateDetail]]Assinatura Assíncrona:await async_client.templates.list() -> CoffeeMailResponse[list[TemplateDetail]]Lista modelos de e-mail cadastrados na organização.
Audiências
.create()
Assinatura Síncrona:client.audiences.create(payload: CreateAudiencePayload | dict) -> CoffeeMailResponse[AudienceDetail]Assinatura Assíncrona:await async_client.audiences.create(payload: CreateAudiencePayload | dict) -> CoffeeMailResponse[AudienceDetail]Cria uma nova lista de audiência para contatos e campanhas.
.add_contact()
Assinatura Síncrona:client.audiences.add_contact(audience_id: str, payload: ContactPayload | dict) -> CoffeeMailResponse[ContactDetail]Assinatura Assíncrona:await async_client.audiences.add_contact(audience_id: str, payload: ContactPayload | dict) -> CoffeeMailResponse[ContactDetail]Adiciona ou atualiza um contato em uma audiência.
.bulk_add()
Assinatura Síncrona:client.audiences.bulk_add(audience_id: str, contacts: list[ContactPayload | dict]) -> CoffeeMailResponse[BulkContactResult]Assinatura Assíncrona:await async_client.audiences.bulk_add(audience_id: str, contacts: list[ContactPayload | dict]) -> CoffeeMailResponse[BulkContactResult]Importa contatos em lote para uma audiência existente.
Broadcasts
.create()
Assinatura Síncrona:client.broadcasts.create(payload: CreateBroadcastPayload | dict) -> CoffeeMailResponse[BroadcastDetail]Assinatura Assíncrona:await async_client.broadcasts.create(payload: CreateBroadcastPayload | dict) -> CoffeeMailResponse[BroadcastDetail]Cria uma campanha de broadcast associada a uma audiência.
.send()
Assinatura Síncrona:client.broadcasts.send(broadcast_id: str) -> CoffeeMailResponse[BroadcastDetail]Assinatura Assíncrona:await async_client.broadcasts.send(broadcast_id: str) -> CoffeeMailResponse[BroadcastDetail]Dispara o envio da campanha para todos os inscritos da audiência.
Supressões
.list()
Assinatura Síncrona:client.suppressions.list(limit: int | None = None, after: str | None = None) -> CoffeeMailResponse[ListSuppressionsResponse]Assinatura Assíncrona:await async_client.suppressions.list(limit: int | None = None, after: str | None = None) -> CoffeeMailResponse[ListSuppressionsResponse]Lista e-mails na lista de supressão por bounce ou unsubscribe.
.add()
Assinatura Síncrona:client.suppressions.add(email: str, reason: str = "manual") -> CoffeeMailResponse[SuppressionDetail]Assinatura Assíncrona:await async_client.suppressions.add(email: str, reason: str = "manual") -> CoffeeMailResponse[SuppressionDetail]Adiciona manualmente um e-mail à lista de supressão.
Webhooks
.verify_signature()
Assinatura Síncrona:Webhooks.verify_signature(payload: str | bytes, signature: str, secret: str) -> boolValida criptograficamente o header de assinatura HMAC SHA-256 do webhook.
Estatísticas
.get()
Assinatura Síncrona:client.stats.get(from_date: str | None = None, to_date: str | None = None) -> CoffeeMailResponse[StatsOverview]Assinatura Assíncrona:await async_client.stats.get(from_date: str | None = None, to_date: str | None = None) -> CoffeeMailResponse[StatsOverview]Consulta métricas agregadas de envio, entrega e rejeição por período.