Referencia de la API
API v1CoffeeMail expone una API REST pública para integración vía API Key. Esta referencia cubre solo las rutas de Producto (/v1/product/*) consumidas por el SDK de Node y por clientes externos. Las rutas internas (Plataforma e Infraestructura) no forman parte de este contrato público.
Alcance de esta referencia
URL base
Autenticación
Todas las solicitudes requieren un Bearer Token en el header Authorization. Puedes crear y revocar API Keys en Dashboard → Claves de API.
Idioma
La API detecta el idioma por el header Accept-Language. Valores soportados: pt-BR (por defecto), en, es. Los mensajes de validación y los códigos de error están localizados.
Formato de error
Todas las respuestas de error siguen el mismo sobre JSON:
Rate limit
Los headers X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset se devuelven en cada solicitud. Los límites se aplican por clave de API y por IP. Consulta la tabla completa en Códigos de error.
Endpoints de la API
Emails
/emails202 AcceptedEnviar emails
Pone en cola un email transaccional. Acepta HTML puro, texto plano, o un templateId + variables. Soporta adjuntos (cadena base64 o Uint8Array), encabezados personalizados, programación (scheduledAt) e idempotencia (idempotencyKey).
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| from* | string | { email, name? } | Remitente (debe ser un dominio verificado). |
| to* | string | string[] | { email, name? }[] | Un destinatario o lista. |
| subject* | string | Asunto. |
| html | string | Contenido HTML. |
| text | string | Fallback en texto plano. |
| templateId | string | Renderiza una plantilla existente. |
| variables | Record<string, unknown> | Variables para la plantilla. |
| cc / bcc / replyTo | EmailAddressInput | Cc, Cco y reply-to. |
| attachments | EmailAttachment[] | Adjuntos. content acepta cadena base64 o Uint8Array. |
| scheduledAt | ISO 8601 | Date | Envio programado. |
| idempotencyKey | string | Evita duplicacion en reintentos. |
| tags | EmailTag[] | Tags para metricas. |
| isSandbox | boolean | No envia de hecho (simulacion). |
Reglas y límites de archivos adjuntos
Estructura del objeto EmailAttachment
| Campo | Tipo | Descripción |
|---|---|---|
| filename* | string (1-255) | Nombre del archivo con extensión (ej: factura.pdf). Límite de 255 caracteres. |
| content* | string (Base64) | Contenido binario del archivo codificado en Base64. |
| contentType* | string (MIME) | MIME type (ej: application/pdf, image/png). Predeterminado en el SDK: application/octet-stream. |
| disposition* | 'attachment' | 'inline' | Modo de entrega: 'attachment' (descarga tradicional) o 'inline' (incrustado en el cuerpo HTML). |
| cid | string (opcional) | Content-ID único utilizado para referenciar imágenes inline en el cuerpo HTML (ej: cid:logo referenciado en img). |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string | Identificador unico del email. |
| status | 'queued' | 'scheduled' | Estado inicial despues del envio. |
| queuedAt | string (ISO 8601) | Marca de tiempo de entrada en cola. |
Ejemplo de respuesta
/emails200 OKListar correos
Lista los correos de la organización con paginación por cursor. Admite filtros por estado, destinatario, remitente, asunto, etiqueta, API key y período.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| status | 'queued' | 'processing' | 'sent' | 'delivered' | 'bounced' | 'complained' | 'failed' | 'skipped' | 'scheduled' | 'cancelled' | Filtra correos por estado de envío. |
| recipient | string | Búsqueda parcial por destinatario en to/cc/bcc. |
| fromEmail | string | Filtra correos por dirección del remitente. |
| subjectContains | string | Búsqueda parcial en el asunto del correo. |
| apiKeyId | string (uuid) | Filtra correos enviados por una API key específica. |
| tag | string | Filtra correos que tienen esta etiqueta. |
| from | string (ISO 8601) | Fecha/hora inicial del período de búsqueda. |
| to | string (ISO 8601) | Fecha/hora final del período de búsqueda. |
| after | string (ISO 8601) | Cursor de paginación para obtener los siguientes registros. |
| limit | number | Cantidad máxima de correos devueltos (por defecto 50, máximo 100). |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| emails | EmailResponse[] | Lista de correos devueltos. |
| nextCursor | string | null | Cursor para obtener la siguiente página, o null si no hay más registros. |
Ejemplo de respuesta
/emails/batch202 AcceptedEnviar correos en lote
Envía hasta 100 correos en una sola llamada. Cada elemento sigue el mismo formato que el envío individual (from, to, subject/html/text o templateId, etc). Los fallos de elementos individuales no anulan todo el lote.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| (array)* | SendEmailRequest[] | Array de 1 a 100 payloads de envío, en el mismo formato que POST /emails. |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| [].ok | boolean | Indica si el elemento fue aceptado con éxito. |
| [].data.id | string | Identificador único del correo creado (cuando ok es true). |
| [].data.status | 'queued' | 'scheduled' | Estado inicial del correo después del envío (cuando ok es true). |
| [].data.queuedAt | string (ISO 8601) | Timestamp de entrada en la cola (cuando ok es true). |
| [].error | string | Mensaje de error del elemento que falló (cuando ok es false). |
Ejemplo de respuesta
/emails/:id200 OKObtener correo por ID
Devuelve los detalles completos de un correo: estado, intentos, timestamps del ciclo de vida, etiquetas, cuerpo (html/text) y la API key usada en el envío.
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string (uuid) | ID único del correo. |
| from | string | Dirección del remitente. |
| to | string[] | Lista de destinatarios. |
| cc / bcc | string[] | null | Lista de destinatarios en copia y en copia oculta. |
| subject | string | null | Asunto del correo. |
| status | 'queued' | 'processing' | 'sent' | 'delivered' | 'bounced' | 'failed' | 'skipped' | 'scheduled' | 'cancelled' | Estado actual del envío. |
| attempts | number | Número de intentos de envío realizados. |
| lastError | string | null | Último mensaje de error registrado en el envío. |
| messageId | string | null | ID del mensaje devuelto por el proveedor de envío. |
| createdAt / scheduledAt / sentAt | string (ISO 8601) | null | Fecha/hora de creación, programación y envío del correo. |
| deliveredAt / bouncedAt / failedAt / complainedAt / suppressedAt | string (ISO 8601) | null | Fecha/hora de entrega, bounce, fallo o queja de spam, si ocurrió. |
| openedAt / firstClickedAt | string (ISO 8601) | null | Fecha/hora de la primera apertura y del primer clic en un enlace. |
| openCount / clickCount | number | Cantidad de aperturas y clics registrados. |
| tags | { name, value }[] | null | Etiquetas asociadas al correo. |
| html / text | string | null | Cuerpo del correo en HTML y en texto plano. |
| apiKey | { id, name } | null | API key usada para enviar el correo. |
Ejemplo de respuesta
/emails/:id/events200 OKLínea de tiempo de eventos
Devuelve el historial de eventos de un correo (en cola, procesando, enviado, entregado, abierto, clic, bounce, queja, fallo), en orden cronológico.
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string (uuid) | ID único del correo. |
| events | { type, timestamp, metadata? }[] | Línea de tiempo de eventos del correo, cada uno con tipo, timestamp y metadata opcional. |
Ejemplo de respuesta
/emails/:id/cancel204 No ContentCancelar correo programado
Cancela un correo que aún está en estado scheduled. No tiene efecto sobre correos que ya entraron en procesamiento o fueron enviados. No devuelve cuerpo en la respuesta.
Ejemplo de petición
/emails/:id/resend202 AcceptedReenviar correo
Vuelve a encolar un correo que falló o fue cancelado, creando un nuevo ciclo de envío.
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string | Identificador único del nuevo envío. |
| status | 'queued' | 'scheduled' | Estado inicial del correo después del reenvío. |
| queuedAt | string (ISO 8601) | Timestamp de entrada en la cola. |
Ejemplo de respuesta
Dominios
/domains201 CreatedAgregar dominio
Registra un dominio en la organizacion y devuelve los registros DNS (SPF, DKIM, DMARC y ownership) que deben configurarse en el proveedor.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| name* | string | FQDN a registrar (ej: empresa.com). |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string | ID del dominio. |
| name | string | Nombre del dominio. |
| status | 'verified' | 'pending' | 'failed' | Estado de validacion. |
| records | DomainDnsRecord[] | SPF/DKIM/DMARC/ownership. |
/domains/:id/verify202 AcceptedVerificar dominio
Ejecuta la verificacion bajo demanda de los registros DNS. Devuelve checks detallados (spf, dkim, dmarc, ownership).
Ejemplo de petición
/domains/:id/health200 OKSalud del dominio
Diagnostico de reputacion, presencia en listas negras y recomendaciones de mejora.
Ejemplo de petición
/domains200 OKListar dominios
Lista todos los dominios registrados en la organización, con estado de verificación y datos de DKIM.
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| domains | DomainListItem[] | Lista de dominios registrados en la organización. |
| domains[].id | string (uuid) | ID único del dominio. |
| domains[].name | string | Nombre del dominio registrado. |
| domains[].status | 'pending' | 'verified' | 'failed' | Estado actual de la verificación del dominio. |
| domains[].dkimSelector | string | Selector usado en el registro DKIM del dominio. |
| domains[].dkimPublicKey | string | null | Clave pública DKIM generada para el dominio. |
| domains[].verifiedAt | string (ISO 8601) | null | Fecha y hora en que el dominio fue verificado. |
| domains[].lastCheckAt | string (ISO 8601) | null | Fecha y hora de la última verificación de DNS realizada. |
| domains[].createdAt | string (ISO 8601) | Fecha y hora en que el dominio fue registrado. |
Ejemplo de respuesta
/domains/:id200 OKObtener dominio
Devuelve el detalle de un dominio, incluyendo los registros DNS (TXT/CNAME) pendientes de publicación.
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string (uuid) | ID único del dominio. |
| name | string | Nombre del dominio registrado. |
| status | 'pending' | 'verified' | 'failed' | Estado actual de la verificación del dominio. |
| dkimSelector | string | Selector usado en el registro DKIM del dominio. |
| dkimPublicKey | string | null | Clave pública DKIM generada para el dominio. |
| verifiedAt | string (ISO 8601) | null | Fecha y hora en que el dominio fue verificado. |
| lastCheckAt | string (ISO 8601) | null | Fecha y hora de la última verificación de DNS realizada. |
| createdAt | string (ISO 8601) | Fecha y hora en que el dominio fue registrado. |
| dnsRecordsToPublish | DnsRecord[] | Registros DNS pendientes que el cliente debe publicar. |
| dnsRecordsToPublish[].type | 'TXT' | 'CNAME' | Tipo de registro DNS a publicar (TXT o CNAME). |
| dnsRecordsToPublish[].host | string | Nombre del host/subdominio donde debe crearse el registro. |
| dnsRecordsToPublish[].value | string | Valor que debe publicarse en el registro DNS. |
| dnsRecordsToPublish[].ttl | number | TTL sugerido en segundos para el registro. |
Ejemplo de respuesta
/domains/:id200 OKEliminar dominio
Elimina (soft-delete) un dominio de la organización. Si la cuenta tiene reautenticación configurada, se deben enviar method + credential; límite de 5 solicitudes por minuto.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| method | 'totp' | 'password' | Método de reautenticación, 'totp' o 'password'. Obligatorio solo si la cuenta tiene reauth configurado. |
| credential | string | Código TOTP o contraseña usada para confirmar la eliminación. |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| ok | boolean | Confirma que el dominio fue eliminado. |
Ejemplo de respuesta
/domains/:id/warmup200 OKEstado de warmup
Consulta el progreso del calentamiento (warmup) de IP/dominio. Devuelve null cuando el dominio aún no ha iniciado el warmup.
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| domainId | string (uuid) | ID único del dominio. |
| currentDay | number | Día actual del período de calentamiento (warmup). |
| dailyQuota | number | Límite diario de envíos permitido para el día actual. |
| sentToday | number | Cantidad de emails ya enviados hoy. |
| remainingToday | number | Cantidad de envíos restantes en la cuota diaria. |
| quotaUsedPercent | number (0-100) | Porcentaje de la cuota diaria ya utilizado. |
| lastSendDate | string | null | Fecha del último envío registrado para el dominio. |
Ejemplo de respuesta
Plantillas
/templates201 CreatedCrear plantilla
Registra una plantilla. Soporta HTML con Handlebars (format: handlebars) o TSX con React Email (format: react_email).
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| name* | string | Nombre de la plantilla. |
| subject | string | Asunto por defecto. |
| html | string | Contenido (Handlebars). |
| text | string | Version en texto plano. |
| format | 'handlebars' | 'react_email' | Motor de plantilla. |
| variables | { name, defaultValue? }[] | Variables esperadas. |
Ejemplo de petición
/templates/preview200 OKRenderizar preview
Renderiza un preview sin enviar util para el playground y validacion de variables.
Ejemplo de petición
/templates200 OKListar plantillas
Devuelve todas las plantillas registradas en la organización, con el código fuente completo de cada una.
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| data | TemplateDetail[] | Lista de plantillas de correo registradas. |
| data[].id | string (uuid) | Identificador único de la plantilla. |
| data[].name | string | Nombre de la plantilla. |
| data[].subject | string | null | Asunto por defecto del correo. |
| data[].html | string | Código fuente HTML o JSX de la plantilla. |
| data[].textPayload | string | null | Versión en texto plano de la plantilla. |
| data[].variables | { name, description? }[] | Variables disponibles para interpolación en la plantilla. |
| data[].isActive | boolean | Indica si la plantilla está activa para su uso. |
| data[].format | 'html' | 'react' | Formato del código fuente de la plantilla. |
| data[].sourceLocale | string | Idioma de origen del contenido de la plantilla. |
| data[].starterSlug | string | null | Slug de la plantilla inicial usada como base, si existe. |
| data[].createdAt | string (ISO 8601) | Fecha de creación de la plantilla. |
| data[].updatedAt | string (ISO 8601) | Fecha de la última actualización de la plantilla. |
Ejemplo de respuesta
/templates/:id200 OKObtener plantilla
Devuelve una plantilla específica por id, con el código fuente completo y las variables disponibles.
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string (uuid) | Identificador único de la plantilla. |
| name | string | Nombre de la plantilla. |
| subject | string | null | Asunto por defecto del correo. |
| html | string | Código fuente HTML o JSX de la plantilla. |
| textPayload | string | null | Versión en texto plano de la plantilla. |
| variables | { name, description? }[] | Variables disponibles para interpolación en la plantilla. |
| isActive | boolean | Indica si la plantilla está activa para su uso. |
| format | 'html' | 'react' | Formato del código fuente de la plantilla. |
| sourceLocale | string | Idioma de origen del contenido de la plantilla. |
| starterSlug | string | null | Slug de la plantilla inicial usada como base, si existe. |
| createdAt | string (ISO 8601) | Fecha de creación de la plantilla. |
| updatedAt | string (ISO 8601) | Fecha de la última actualización de la plantilla. |
Ejemplo de respuesta
/templates/:id200 OKActualizar plantilla
Actualiza parcialmente una plantilla existente. Envía solo los campos que quieras cambiar.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| name | string | Nuevo nombre de la plantilla. |
| subject | string | null | Nuevo asunto por defecto del correo. |
| html | string | Nuevo código fuente HTML o JSX. |
| textPayload | string | null | Nueva versión en texto plano. |
| variables | { name, description? }[] | Nueva lista de variables disponibles para interpolación. |
| format | 'html' | 'react' | Nuevo formato del código fuente. |
| isActive | boolean | Activa o desactiva la plantilla. |
| sourceLocale | string | Nuevo idioma de origen del contenido. |
| starterSlug | string | null | Slug de la plantilla inicial usada como base. |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string (uuid) | Identificador único de la plantilla. |
| name | string | Nombre de la plantilla. |
| isActive | boolean | Indica si la plantilla está activa para su uso. |
| updatedAt | string (ISO 8601) | Fecha de la última actualización de la plantilla. |
Ejemplo de respuesta
/templates/:id204 No ContentEliminar plantilla
Elimina una plantilla de forma definitiva. Esta acción no se puede deshacer.
Ejemplo de petición
/templates/format200 OKFormatear plantilla
Formatea el código fuente de una plantilla (HTML o JSX) mediante Prettier, sin persistir nada.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| html* | string | Código fuente HTML o JSX a formatear. |
| format | 'html' | 'react' | Formato del código de origen. |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| html | string | Código fuente formateado. |
Ejemplo de respuesta
/templates/test-render200 OKRender de prueba sanitizado
Renderiza una plantilla con variables y sanitiza el HTML resultante (elimina scripts, iframes, enlaces javascript: y manejadores de eventos inline). A diferencia de /templates/preview, que no sanitiza usa este endpoint para probar contenido no confiable.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| html* | string | Código fuente HTML o JSX de la plantilla a renderizar. |
| format | 'html' | 'react' | Formato de la plantilla de origen. |
| variables | Record<string, unknown> | Valores de las variables usadas para completar la plantilla. |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| html | string | HTML final renderizado y sanitizado. |
| text | string | Versión en texto plano del correo renderizado. |
| sanitizeReport | { scripts, iframes, javascriptHrefs, eventHandlers } | Informe con la cantidad de elementos eliminados por la sanitización (scripts, iframes, enlaces javascript: y manejadores de eventos). |
Ejemplo de respuesta
Audiencias y contactos
/audiences201 CreatedCrear audiencia
Crea una lista segmentada de contactos.
Ejemplo de petición
/audiences/:id/contacts201 CreatedAgregar contacto
Inserta un contacto en una audiencia. Acepta firstName, lastName y metadata arbitraria.
Ejemplo de petición
/audiences200 OKListar audiencias
Lista las audiencias de la organización, con paginación.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| limit | number | Cantidad máxima de elementos por página (por defecto 50, máximo 200). |
| offset | number | Cantidad de elementos a omitir desde el inicio (por defecto 0). |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| audiences | Audience[] | Lista de audiencias encontradas. |
| total | number | Total de audiencias de la organización. |
Ejemplo de respuesta
/audiences/:id200 OKObtener audiencia
Devuelve los datos de una audiencia específica.
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string | Identificador único de la audiencia. |
| name | string | Nombre de la audiencia. |
| description | string | null | Descripción de la audiencia. |
| active | boolean | Si la audiencia está activa. |
| contactsCount | number | Cantidad de contactos en la audiencia. |
| createdAt | string (ISO 8601) | Fecha de creación de la audiencia. |
| updatedAt | string (ISO 8601) | Fecha de la última actualización de la audiencia. |
Ejemplo de respuesta
/audiences/:id200 OKActualizar audiencia
Actualiza el nombre, la descripción y/o el estado de una audiencia. Se debe enviar al menos un campo.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| name | string | Nuevo nombre de la audiencia. |
| description | string | null | Nueva descripción de la audiencia. Envía null para borrarla. |
| active | boolean | Si la audiencia está activa. |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string | Identificador único de la audiencia actualizada. |
Ejemplo de respuesta
/audiences/:id204 No ContentEliminar audiencia
Elimina permanentemente una audiencia y sus contactos. No devuelve cuerpo en la respuesta.
Ejemplo de petición
/audiences/:id/contacts200 OKListar contactos de la audiencia
Lista los contactos de una audiencia, con paginación.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| limit | number | Cantidad máxima de elementos por página (por defecto 100, máximo 500). |
| offset | number | Cantidad de elementos a omitir desde el inicio (por defecto 0). |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| contacts | Contact[] | Lista de contactos encontrados. |
| total | number | Total de contactos en la audiencia. |
Ejemplo de respuesta
/audiences/:id/contacts/bulk200 OKAgregar contactos en lote
Agrega hasta 10.000 contactos de una vez a una audiencia.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| contacts* | { email, firstName?, lastName?, metadata? }[] | Lista de contactos a agregar (email obligatorio; firstName, lastName y metadata opcionales). |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| inserted | number | Cantidad de contactos insertados con éxito. |
| skipped | number | Cantidad de contactos omitidos (por ejemplo, emails duplicados dentro de la audiencia). |
| errors | { email, reason }[] | Lista de errores por email, con el motivo de cada falla. |
Ejemplo de respuesta
/audiences/:id/contacts/:contactId200 OKActualizar contacto
Actualiza firstName, lastName y/o metadata de un contacto. Se debe enviar al menos un campo.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| firstName | string | null | Nuevo primer nombre del contacto. Envía null para borrarlo. |
| lastName | string | null | Nuevo apellido del contacto. Envía null para borrarlo. |
| metadata | Record<string, unknown> | Datos adicionales del contacto en formato libre. |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string | Identificador único del contacto actualizado. |
Ejemplo de respuesta
/audiences/:id/contacts/:contactId204 No ContentEliminar contacto
Elimina un contacto de una audiencia. No devuelve cuerpo en la respuesta.
Ejemplo de petición
Campañas (broadcasts)
/broadcasts201 CreatedCrear campana
Crea una campana para una audiencia. Puede usar una plantilla existente (templateId) o HTML propio. Acepta programacion via scheduledAt.
Ejemplo de petición
/broadcasts/:id/send202 AcceptedDisparar campana
Pone la campana en estado de envio. Los encabezados RFC 8058 (List-Unsubscribe y List-Unsubscribe-Post) se inyectan automaticamente.
Ejemplo de petición
/broadcasts200 OKListar campañas
Lista las campañas de broadcast de la organización. Filtra por estado y período, con paginación por cursor.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| status | 'draft' | 'scheduled' | 'sending' | 'sent' | 'failed' | 'cancelled' | Filtra por el estado del broadcast. |
| from | string (ISO 8601) | Fecha inicial del período de búsqueda. |
| to | string (ISO 8601) | Fecha final del período de búsqueda. |
| after | string | Cursor de paginación devuelto por una llamada anterior. |
| limit | number (max 200) | Cantidad máxima de broadcasts devueltos por página. |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| broadcasts | Broadcast[] | Lista de broadcasts de la página actual. |
| nextCursor | string | null | Cursor para obtener la próxima página, o null si no hay más resultados. |
Ejemplo de respuesta
/broadcasts/:id200 OKObtener campaña
Devuelve los datos completos de una campaña específica, incluyendo estado y contadores de destinatarios.
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string | Identificador único del broadcast. |
| audienceId | string | Identificador de la audiencia destinataria. |
| audienceName | string | null | Nombre de la audiencia destinataria. |
| templateId | string | null | Identificador del template usado en el envío, si existe. |
| subject | string | Asunto del correo. |
| fromEmail | string | Dirección de correo del remitente. |
| replyTo | string | null | Dirección de correo para respuestas. |
| status | 'draft' | 'scheduled' | 'sending' | 'sent' | 'failed' | 'cancelled' | Estado actual del broadcast. |
| scheduledAt | string (ISO 8601) | null | Fecha y hora programadas para el envío. |
| sentAt | string (ISO 8601) | null | Fecha y hora en que se completó el envío. |
| cancelledAt | string (ISO 8601) | null | Fecha y hora en que se canceló el broadcast. |
| recipientsTotal | number | Total de destinatarios del broadcast. |
| recipientsQueued | number | Cantidad de destinatarios encolados para el envío. |
| recipientsFailed | number | Cantidad de destinatarios con fallo en el envío. |
| createdAt | string (ISO 8601) | Fecha de creación del broadcast. |
| updatedAt | string (ISO 8601) | Fecha de la última actualización del broadcast. |
Ejemplo de respuesta
/broadcasts/:id/cancel200 OKCancelar campaña
Cancela un broadcast programado o en curso de envío. Los correos ya entregados no se ven afectados.
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string | Identificador único del broadcast. |
| status | 'cancelled' | Estado del broadcast después de la cancelación. |
| cancelledAt | string (ISO 8601) | null | Fecha y hora en que se canceló el broadcast. |
Ejemplo de respuesta
Supresiones
/suppressions200 OKListar supresiones
Lista bloqueos activos (bounces, complaints, unsubscribes y manuales).
Ejemplo de petición
/suppressions201 CreatedAgregar supresión
Agrega manualmente un email a la lista de supresión.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| email* | string (email) | Dirección de email a suprimir. |
| reason | 'manual' | 'bounce' | 'complaint' | Motivo de la supresión. Solo acepta 'manual', 'bounce' o 'complaint'. |
| expiresAt | string (ISO 8601) | Fecha en la que la supresión expira y el email vuelve a recibir envíos. |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string (uuid) | Identificador único de la supresión. |
| string | Dirección de email suprimida. | |
| reason | 'manual' | 'bounce' | 'isp_block' | 'mailbox_not_found' | 'complaint' | 'unsubscribe' | Motivo que originó la supresión. |
| source | 'manual' | 'auto' | Origen de la supresión: manual o automática. |
| category | string | Categoría de clasificación de la supresión. |
| status | 'active' | 'expired' | 'inactive' | Estado actual de la supresión. |
| expiresAt | string (ISO 8601) | null | Fecha en la que la supresión expira y el email vuelve a recibir envíos. |
| createdAt | string (ISO 8601) | Fecha de creación de la supresión. |
Ejemplo de respuesta
/suppressions/:id200 OKObtener supresión
Devuelve los detalles de una supresión específica por id.
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string (uuid) | Identificador único de la supresión. |
| string | Dirección de email suprimida. | |
| reason | 'manual' | 'bounce' | 'isp_block' | 'mailbox_not_found' | 'complaint' | 'unsubscribe' | Motivo que originó la supresión. |
| source | 'manual' | 'auto' | Origen de la supresión: manual o automática. |
| category | string | Categoría de clasificación de la supresión. |
| status | 'active' | 'expired' | 'inactive' | Estado actual de la supresión. |
| expiresAt | string (ISO 8601) | null | Fecha en la que la supresión expira y el email vuelve a recibir envíos. |
| createdAt | string (ISO 8601) | Fecha de creación de la supresión. |
Ejemplo de respuesta
/suppressions/:id204 No ContentEliminar supresión
Elimina definitivamente una supresión de la lista.
Ejemplo de petición
/suppressions/:id/reactivate204 No ContentReactivar supresión
Deshace una supresión, permitiendo que el email vuelva a recibir envíos.
Ejemplo de petición
Webhooks
/webhooks201 CreatedRegistrar webhook
Registra un endpoint HTTPS para recibir eventos. Recomendamos proporcionar un secret para validacion HMAC SHA-256.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| url* | string (HTTPS) | URL de destino. |
| events* | WebhookEventType[] | Eventos a suscribirse (ej: email.delivered). |
| secret | string | Clave secreta para HMAC. |
Ejemplo de petición
/webhooks/:id/test202 AcceptedProbar webhook
Dispara un evento simulado para validar el endpoint y la configuracion.
Ejemplo de petición
/webhooks200 OKListar webhooks
Lista los webhooks registrados en la organización, con filtro opcional por status.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| status | 'active' | 'paused' | 'disabled' | Filtra webhooks por su status actual (active, paused o disabled). |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| webhooks | WebhookListItem[] | Lista de webhooks registrados en la organización. |
| webhooks[].id | string (uuid) | Identificador del webhook. |
| webhooks[].url | string | URL de destino que recibe los eventos. |
| webhooks[].events | string[] | Eventos a los que el webhook está suscrito. |
| webhooks[].status | 'active' | 'paused' | 'disabled' | Status actual del webhook. |
| webhooks[].description | string | null | Descripción proporcionada por el usuario para el webhook. |
| webhooks[].hasSecret | boolean | Indica si el webhook tiene un secreto de firma configurado. |
| webhooks[].createdAt | string (ISO 8601) | Fecha y hora de creación del webhook. |
Ejemplo de respuesta
/webhooks/:id200 OKObtener webhook
Devuelve los detalles de un webhook específico, incluyendo una vista previa truncada del secreto de firma.
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string (uuid) | Identificador del webhook. |
| url | string | URL de destino que recibe los eventos. |
| events | string[] | Eventos a los que el webhook está suscrito. |
| status | 'active' | 'paused' | 'disabled' | Status actual del webhook. |
| description | string | null | Descripción proporcionada por el usuario para el webhook. |
| createdAt | string (ISO 8601) | Fecha y hora de creación del webhook. |
| secret | null | Siempre null en esta ruta el secreto completo no se vuelve a mostrar después de la creación. |
| secretPreview | string | null | Vista previa truncada del secreto, para exhibición segura. |
Ejemplo de respuesta
/webhooks/:id200 OKActualizar webhook
Actualiza url, events y/o description de un webhook existente. Debe enviarse al menos uno de los campos.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| url | string (URL) | Nueva URL de destino que recibirá los eventos. |
| events | WebhookEventType[] | Nuevos eventos a los que el webhook debe suscribirse. |
| description | string | null | Nueva descripción del webhook (envía null para eliminarla). |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string (uuid) | Identificador del webhook. |
| url | string | URL de destino que recibe los eventos. |
| events | string[] | Eventos a los que el webhook está suscrito. |
| status | 'active' | 'paused' | 'disabled' | Status actual del webhook. |
| description | string | null | Descripción proporcionada por el usuario para el webhook. |
| createdAt | string (ISO 8601) | Fecha y hora de creación del webhook. |
| secret | null | Siempre null en esta ruta el secreto completo no se vuelve a mostrar después de la creación. |
| secretPreview | string | null | Vista previa truncada del secreto, para exhibición segura. |
Ejemplo de respuesta
/webhooks/:id200 OKActivar o pausar webhook
Cambia únicamente el status del webhook (active o paused), sin afectar url, events ni description.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| status* | 'active' | 'paused' | Nuevo status del webhook (active o paused). |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string (uuid) | Identificador del webhook. |
| status | 'active' | 'paused' | Nuevo status aplicado al webhook. |
Ejemplo de respuesta
/webhooks/:id204 No ContentEliminar webhook
Elimina definitivamente el webhook de la organización. No devuelve cuerpo en la respuesta.
Ejemplo de petición
/webhooks/:id/deliveries200 OKListar entregas del webhook
Lista los intentos de entrega de eventos de un webhook, con filtros por tipo de evento, status y período.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| eventType | string | Filtra entregas por tipo de evento. |
| status | 'pending' | 'success' | 'failed' | 'exhausted' | Filtra entregas por su status actual. |
| from | string (ISO 8601) | Fecha inicial del período de búsqueda. |
| to | string (ISO 8601) | Fecha final del período de búsqueda. |
| limit | number (max 200) | Cantidad máxima de entregas devueltas (hasta 200). |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| deliveries | WebhookDelivery[] | Lista de intentos de entrega del webhook. |
| deliveries[].id | string (uuid) | Identificador del intento de entrega. |
| deliveries[].webhookId | string (uuid) | Identificador del webhook asociado. |
| deliveries[].emailEventId | string (uuid) | null | Evento de correo que originó la entrega. |
| deliveries[].eventType | string | Tipo de evento disparado (ej: email.delivered). |
| deliveries[].responseStatus | number | null | Status HTTP devuelto por el endpoint de destino. |
| deliveries[].responseBody | string | null | Cuerpo de la respuesta devuelta por el endpoint de destino. |
| deliveries[].attempts | number | Cantidad de intentos de envío ya realizados. |
| deliveries[].lastError | string | null | Mensaje del último error ocurrido en el envío. |
| deliveries[].status | 'pending' | 'success' | 'failed' | 'exhausted' | Status actual de la entrega. |
| deliveries[].nextRunAt | string (ISO 8601) | Fecha y hora del próximo intento de reenvío. |
| deliveries[].createdAt | string (ISO 8601) | Fecha y hora en que se creó la entrega. |
Ejemplo de respuesta
/webhooks/:id/rotate-secret200 OKRotar secreto
Genera un nuevo secreto de firma HMAC para el webhook, invalidando el anterior. El valor completo se devuelve solo en esta respuesta.
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| webhookId | string (uuid) | Identificador del webhook. |
| secret | string | Nuevo secreto completo, usado para firmar los payloads enviados se muestra una única vez. |
Ejemplo de respuesta
Estadísticas
/stats200 OKMetricas generales
Devuelve contadores agregados (sent, delivered, failed, bounced, complained, opened?, clicked?).
Ejemplo de petición
Remitentes
/senders201 CreatedCrear remitente
Registra una identidad de remitente de correo individual y envía un email de verificación. La respuesta incluye un verificationToken, pero la identidad no puede usarse para enviar hasta que POST /senders/verify confirme la verificación.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| email* | string (email) | Dirección de correo del remitente a verificar. |
| displayName | string (max 200) | Nombre para mostrar del remitente. |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string (uuid) | Identificador único del remitente. |
| string | Dirección de correo del remitente. | |
| displayName | string | null | Nombre para mostrar del remitente. |
| verificationToken | string | Token enviado al correo para confirmar la verificación. |
| verifiedAt | string (ISO 8601) | null | Fecha/hora en que se verificó el remitente. |
| active | boolean | Si el remitente está activo para el envío. |
| createdAt | string (ISO 8601) | Fecha/hora de creación del remitente. |
Ejemplo de respuesta
/senders200 OKListar remitentes
Lista las identidades de remitente individual registradas en la organización.
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| senders | Sender[] | Lista de remitentes de la organización. |
Ejemplo de respuesta
/senders/verify200 OKVerificar remitente
Confirma la verificación de un remitente individual usando el token recibido por correo. Una vez verificado, la dirección puede usarse en el campo "from" de los envíos.
Request body
| Campo | Tipo | Descripción |
|---|---|---|
| token* | string (uuid) | Token de verificación recibido por correo. |
Ejemplo de petición
Response
| Campo | Tipo | Descripción |
|---|---|---|
| id | string (uuid) | Identificador único del remitente. |
| string | Dirección de correo del remitente. |
Ejemplo de respuesta
/senders/:id204 No ContentEliminar remitente
Elimina una identidad de remitente individual de la organización. La eliminación es definitiva y el correo deberá verificarse nuevamente si se vuelve a registrar.