SDK Python
PyPI: coffeemail v0.1.0Referencia completa del paquete oficial coffeemail para Python (PyPI). Soporte síncrono y asíncrono (FastAPI/asyncio), modelos Pydantic v2, retorno seguro data, error y método .unwrap().
¿Buscas la documentación para Node.js o TypeScript? Consulta la referencia oficial del paquete @coffeemail/node.
Instalación
pypi.org/project/coffeemail ↗1. Cliente Síncrono (Django, Flask, Celery)
Soporte para clientes síncronos (CoffeeMail) y asíncronos (AsyncCoffeeMail). La API Key se carga automáticamente de la variable de entorno COFFEEMAIL_API_KEY si se omite.
CoffeeMail(api_key: str | None = None, *, timeout: float = 10.0, locale: Locale = "pt-BR")2. Cliente Asíncrono (FastAPI, asyncio, Temporal)
Soporte para clientes síncronos (CoffeeMail) y asíncronos (AsyncCoffeeMail). La API Key se carga automáticamente de la variable de entorno COFFEEMAIL_API_KEY si se omite.
AsyncCoffeeMail(api_key: str | None = None, *, timeout: float = 10.0, locale: Locale = "pt-BR")Desempaquetado de Tupla (Recomendado)
Padrão Idiomático SeguroTodas las operaciones retornan una instancia de CoffeeMailResponse[T] permitiendo desempaquetar data, error directamente o invocar .unwrap() para lanzar excepciones capturables.
Método .unwrap() (Estilo Excepción)
Try / ExceptTodas las operaciones retornan una instancia de CoffeeMailResponse[T] permitiendo desempaquetar data, error directamente o invocar .unwrap() para lanzar excepciones capturables.
Validación Criptográfica de Webhooks
La utilidad Webhooks.verify_signature valida la firma HMAC SHA-256 en el encabezado x-coffeemail-signature contra la manipulación de cargas útiles.
Emails
.send()
Firma Síncrona:client.emails.send(payload: SendEmailPayload | dict) -> CoffeeMailResponse[SendEmailResponse]Firma Asíncrona:await async_client.emails.send(payload: SendEmailPayload | dict) -> CoffeeMailResponse[SendEmailResponse]Envía un correo transaccional de forma síncrona o asíncrona.
.send_batch()
Firma Síncrona:client.emails.send_batch(emails: list[SendEmailPayload | dict]) -> CoffeeMailResponse[BatchSendEmailResult]Firma Asíncrona:await async_client.emails.send_batch(emails: list[SendEmailPayload | dict]) -> CoffeeMailResponse[BatchSendEmailResult]Envía múltiples correos en un solo lote optimizado.
.get()
Firma Síncrona:client.emails.get(email_id: str) -> CoffeeMailResponse[EmailDetail]Firma Asíncrona:await async_client.emails.get(email_id: str) -> CoffeeMailResponse[EmailDetail]Consulta detalles, estado de entrega y marcas de tiempo de un correo.
.list()
Firma Síncrona:client.emails.list(limit: int | None = None, after: str | None = None, status: str | None = None) -> CoffeeMailResponse[ListEmailsResponse]Firma Asíncrona:await async_client.emails.list(limit: int | None = None, after: str | None = None, status: str | None = None) -> CoffeeMailResponse[ListEmailsResponse]Lista correos recientes con soporte para paginación y filtros de estado.
.cancel()
Firma Síncrona:client.emails.cancel(email_id: str) -> CoffeeMailResponse[dict[str, object]]Firma Asíncrona:await async_client.emails.cancel(email_id: str) -> CoffeeMailResponse[dict[str, object]]Cancela un correo programado antes de su envío.
Dominios
.create()
Firma Síncrona:client.domains.create(name: str) -> CoffeeMailResponse[CreateDomainResponse]Firma Asíncrona:await async_client.domains.create(name: str) -> CoffeeMailResponse[CreateDomainResponse]Registra un nuevo dominio remitente y devuelve los registros DNS requeridos.
.verify()
Firma Síncrona:client.domains.verify(domain_id: str) -> CoffeeMailResponse[DomainDetail]Firma Asíncrona:await async_client.domains.verify(domain_id: str) -> CoffeeMailResponse[DomainDetail]Ejecuta la verificación activa de registros SPF, DKIM, DMARC y MX.
.list()
Firma Síncrona:client.domains.list() -> CoffeeMailResponse[ListDomainsResponse]Firma Asíncrona:await async_client.domains.list() -> CoffeeMailResponse[ListDomainsResponse]Lista los dominios configurados para la organización.
.get()
Firma Síncrona:client.domains.get(domain_id: str) -> CoffeeMailResponse[DomainDetail]Firma Asíncrona:await async_client.domains.get(domain_id: str) -> CoffeeMailResponse[DomainDetail]Obtiene detalles y estado de propagación DNS de un dominio.
.delete()
Firma Síncrona:client.domains.delete(domain_id: str) -> CoffeeMailResponse[dict[str, object]]Firma Asíncrona:await async_client.domains.delete(domain_id: str) -> CoffeeMailResponse[dict[str, object]]Elimina un dominio remitente registrado.
Plantillas
.create()
Firma Síncrona:client.templates.create(payload: CreateTemplatePayload | dict) -> CoffeeMailResponse[TemplateDetail]Firma Asíncrona:await async_client.templates.create(payload: CreateTemplatePayload | dict) -> CoffeeMailResponse[TemplateDetail]Registra una plantilla de correo con variables dinámicas.
.preview()
Firma Síncrona:client.templates.preview(payload: PreviewTemplatePayload | dict) -> CoffeeMailResponse[PreviewTemplateResponse]Firma Asíncrona:await async_client.templates.preview(payload: PreviewTemplatePayload | dict) -> CoffeeMailResponse[PreviewTemplateResponse]Genera una vista previa HTML de la plantilla con datos simulados.
.list()
Firma Síncrona:client.templates.list() -> CoffeeMailResponse[list[TemplateDetail]]Firma Asíncrona:await async_client.templates.list() -> CoffeeMailResponse[list[TemplateDetail]]Lista plantillas de correo registradas en la organización.
Audiencias
.create()
Firma Síncrona:client.audiences.create(payload: CreateAudiencePayload | dict) -> CoffeeMailResponse[AudienceDetail]Firma Asíncrona:await async_client.audiences.create(payload: CreateAudiencePayload | dict) -> CoffeeMailResponse[AudienceDetail]Crea una nueva lista de audiencia para contactos y campañas.
.add_contact()
Firma Síncrona:client.audiences.add_contact(audience_id: str, payload: ContactPayload | dict) -> CoffeeMailResponse[ContactDetail]Firma Asíncrona:await async_client.audiences.add_contact(audience_id: str, payload: ContactPayload | dict) -> CoffeeMailResponse[ContactDetail]Agrega o actualiza un contacto en una audiencia.
.bulk_add()
Firma Síncrona:client.audiences.bulk_add(audience_id: str, contacts: list[ContactPayload | dict]) -> CoffeeMailResponse[BulkContactResult]Firma Asíncrona:await async_client.audiences.bulk_add(audience_id: str, contacts: list[ContactPayload | dict]) -> CoffeeMailResponse[BulkContactResult]Importa contactos en lote a una audiencia existente.
Broadcasts
.create()
Firma Síncrona:client.broadcasts.create(payload: CreateBroadcastPayload | dict) -> CoffeeMailResponse[BroadcastDetail]Firma Asíncrona:await async_client.broadcasts.create(payload: CreateBroadcastPayload | dict) -> CoffeeMailResponse[BroadcastDetail]Crea una campaña de broadcast asociada a una audiencia.
.send()
Firma Síncrona:client.broadcasts.send(broadcast_id: str) -> CoffeeMailResponse[BroadcastDetail]Firma Asíncrona:await async_client.broadcasts.send(broadcast_id: str) -> CoffeeMailResponse[BroadcastDetail]Inicia el envío de la campaña a todos los suscriptores activos.
Supresiones
.list()
Firma Síncrona:client.suppressions.list(limit: int | None = None, after: str | None = None) -> CoffeeMailResponse[ListSuppressionsResponse]Firma Asíncrona:await async_client.suppressions.list(limit: int | None = None, after: str | None = None) -> CoffeeMailResponse[ListSuppressionsResponse]Lista direcciones suprimidas por rebote o cancelación de suscripción.
.add()
Firma Síncrona:client.suppressions.add(email: str, reason: str = "manual") -> CoffeeMailResponse[SuppressionDetail]Firma Asíncrona:await async_client.suppressions.add(email: str, reason: str = "manual") -> CoffeeMailResponse[SuppressionDetail]Agrega manualmente un correo a la lista de supresión.
Webhooks
.verify_signature()
Firma Síncrona:Webhooks.verify_signature(payload: str | bytes, signature: str, secret: str) -> boolValida criptográficamente el encabezado de firma HMAC SHA-256 del webhook.
Estadísticas
.get()
Firma Síncrona:client.stats.get(from_date: str | None = None, to_date: str | None = None) -> CoffeeMailResponse[StatsOverview]Firma Asíncrona:await async_client.stats.get(from_date: str | None = None, to_date: str | None = None) -> CoffeeMailResponse[StatsOverview]Consulta métricas agregadas de envío, entrega y rechazo por período.