Envío de correos
POST /emails acepta un destinatario por solicitud. Requiere emails:send:transactional o emails:send:marketing, Idempotency-Key, remitente autorizado y capacidad del producto.
Envía contenido inline
Este ejemplo es Transactional. Sustituye las direcciones por las autorizadas en tu entorno:
curl "$SENDIRO_API_BASE/v1/workspaces/$SENDIRO_WORKSPACE_ID/emails" \
-H "Authorization: Bearer $SENDIRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-confirmation-unique-operation" \
--data '{
"purpose": "transactional",
"from": {"email": "equipo@example.com", "name": "Equipo"},
"recipient": {"kind": "address", "address": {"email": "cliente@example.net"}},
"content": {"kind": "inline", "subject": "Pedido recibido", "body": {"text": "Recibimos tu pedido."}}
}'
Puedes usar recipient: {kind: "contact", contactId: "CONTACT_ID"}. Transactional admite una dirección sin crear un perfil ni suscribirla a Marketing. Una baja de Marketing no impide Transactional; una supresión de entrega sí puede impedirlo.
Marketing exige purpose: "marketing" y destinatario de tipo contact, activo, suscrito y sin supresión. Añadirlo a una audiencia no sustituye consentimiento.
Usa una publicación
En lugar de contenido inline, usa una revisión publicada e inmutable:
{
"kind": "emailDesign",
"emailDesign": {"emailDesignId": "DESIGN_ID", "revisionId": "REVISION_ID"},
"variables": {"orderNumber": "A-123"}
}
Este objeto sustituye a content. No combines subject o body inline con emailDesign. Las variables deben coincidir con las declaradas por el diseño. Obtén los IDs mediante un administrador: las claves no listan ni publican diseños.
Sigue el envío
Un 202 devuelve un recibo con id, workspaceId, status: "queued" y acceptedAt. Consulta GET /emails/{id} con emails:read. GET /emails admite filtros de finalidad, contacto y estado de presentación.
queued, sending y retry_scheduled describen trabajo pendiente. submitted confirma aceptación del transporte; failed y suppressed describen finales conocidos. submission_unknown conserva incertidumbre y reserva: no reenvíes con otra clave.
La propiedad delivery conserva observaciones posteriores de entrega, rebote, queja, apertura y clic. Consulta GET /emails/{id}/events con emails:read y events:read, o recibe webhooks. Una entrega no garantiza llegada a la bandeja principal.