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.