Correo transaccional — para el programador

Usá esta API desde un formulario web u otro sistema. Pedí una API Key al administrador (módulo Mail → Sistemas). La clave va en el encabezado X-API-Key, no en el HTML público del form si el visitante no debe verla: lo ideal es que tu backend la envíe.

Base

https://ws.a3.com.py/centroservicios

Autenticación: encabezado X-API-Key: cuatro-palabras-en-español. CORS habilitado para llamadas desde el navegador.

1. Enviar un correo

POST https://ws.a3.com.py/centroservicios/api/mail/v1/send

JSON. Campos obligatorios: to, subject, html.

{
  "to": "cliente@correo.com",
  "to_name": "Juan Pérez",
  "subject": "Consulta desde la web",
  "html": "<p>Hola, este es el mensaje.</p>",
  "text": "Hola, este es el mensaje.",
  "notification_email": "copia@tuempresa.com"
}

Respuesta 202 (encolado) o 200 (ya salió):

{
  "success": true,
  "uuid": "mail_66d1a2b3c4d5e6",
  "status": "queued",
  "sent": false,
  "message": "Correo aceptado. Consultá el estado con GET /api/mail/v1/status?uuid=…"
}

2. Consultar si se envió

Guardá el uuid del paso 1 y preguntá el estado.

GET https://ws.a3.com.py/centroservicios/api/mail/v1/status?uuid=mail_66d1a2b3c4d5e6

Varios a la vez: ?uuid=id1,id2,id3 (máximo 50). Solo ves los correos de tu sistema.

Estados: pending, queued, sent, failed, bounced. Si sent es true, ya salió.

{
  "success": true,
  "item": {
    "uuid": "mail_66d1a2b3c4d5e6",
    "status": "sent",
    "sent": true,
    "to": "cliente@correo.com",
    "subject": "Consulta desde la web",
    "attempts": 1,
    "sent_at": "2026-08-27 15:04:11",
    "created_at": "2026-08-27 15:04:10",
    "last_error": null
  }
}

3. Listado y totales de tu sistema

GET https://ws.a3.com.py/centroservicios/api/mail/v1/messages

Opcional: ?status=sent, ?limit=20 (máx. 50), ?since=2026-08-01 00:00:00.

{
  "success": true,
  "counts": { "pending": 0, "queued": 1, "sent": 12, "failed": 0, "bounced": 0 },
  "items": [ ]
}

4. Probar la API Key

GET https://ws.a3.com.py/centroservicios/api/mail/v1/test

Códigos HTTP

  • 200 / 202 — OK
  • 400 — Faltan campos o uuid
  • 401 — Sin API Key o inválida
  • 403 — Sistema suspendido o IP no autorizada
  • 404 — Ese uuid no existe en tu sistema
  • 429 — Superaste el límite de correos por hora (el sistema se suspende)

Ejemplo JavaScript (formulario web)

const API = "https://ws.a3.com.py/centroservicios";
const KEY = "tu-api-key";

async function enviarContacto(to, subject, html) {
  const res = await fetch(API + "/api/mail/v1/send", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "X-API-Key": KEY
    },
    body: JSON.stringify({ to, subject, html })
  });
  const data = await res.json();
  if (!data.success) throw new Error(data.error || "No se pudo enviar");
  return data.uuid;
}

async function seEnvio(uuid) {
  const res = await fetch(API + "/api/mail/v1/status?uuid=" + encodeURIComponent(uuid), {
    headers: { "X-API-Key": KEY }
  });
  const data = await res.json();
  return data.item; // { status, sent, sent_at, last_error, ... }
}

Ejemplo curl

curl -X POST https://ws.a3.com.py/centroservicios/api/mail/v1/send \
  -H "Content-Type: application/json" \
  -H "X-API-Key: tu-api-key" \
  -d '{"to":"cliente@correo.com","subject":"Hola","html":"<p>Hola</p>"}'

curl https://ws.a3.com.py/centroservicios/api/mail/v1/status?uuid=EL_UUID \
  -H "X-API-Key: tu-api-key"