¿Cayó el SINPE? Cuatro dígitos y salís de la duda.
Leemos el aviso real que te manda el banco, no el pantallazo que te enseña el cliente. Escribís los últimos 4 números del comprobante y sabés al toque si la plata entró, cuánto fue y si ese comprobante ya se usó.
- Sin claves del banco
- Avisos verificados (DKIM, ARC o SPF)
- Cada comprobante, una sola vez
- Monto
- ₡12 500,00
- De
- Rocío Ejemplo M.
- Teléfono
- 6000-0001
- Motivo
- ORD-1042
Del aviso del banco a tu caja, sin que nadie toque nada
El banco avisa
Cada SINPE que te entra genera un correo del banco (o un SMS que reenviás). Ese aviso es la prueba, no la foto del comprobante.
Lo leemos cada 30 s
Con una contraseña de aplicación: solo leemos, nunca borramos ni enviamos correos. Si el aviso no pasa DKIM, ARC o SPF, se descarta.
Vos preguntás
Desde la caja del panel o con una llamada a la API: los 4 dígitos y, mejor todavía, el monto.
Queda sellado
Al verificar, el comprobante se marca como usado en la misma operación. Un segundo intento sale como «ya usado».
Un pantallazo editado no alcanza para pasar
Solo avisos auténticos
Aceptamos correos de dominios bancarios conocidos que pasen DKIM, ARC o SPF. Lo demás queda en la lista de descartados, con el motivo.
Un uso por comprobante
La marca de «usado» se hace dentro de una transacción de la base de datos: dos cajas a la vez no pueden aprobar el mismo pago.
Al día, no a fin de mes
Lista de lo recibido que se refresca sola, historial de quién verificó qué y webhooks firmados con HMAC-SHA256 para tu sistema.
Lo mismo, desde el mostrador o desde tu sistema
En la caja
El cajero escribe los 4 dígitos y ve el resultado como un recibo sellado. Al lado, los últimos SINPE que entraron.
En tu código
Una llamada desde tu servidor. La respuesta llega en JSON y en español. Ver la documentación.
# Verificar y marcar como usado
curl -X POST https://s1mpl3.net/api/v1/verificar \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"ultimos4":"0427","monto":12500,"referencia_externa":"ORD-1042"}'const r = await fetch("https://s1mpl3.net/api/v1/verificar", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.S1MPL3_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ ultimos4: "0427", monto: 12500, referencia_externa: "ORD-1042" }),
});
const d = await r.json(); // d.verificado === true$ch = curl_init("https://s1mpl3.net/api/v1/verificar");
curl_setopt_array($ch, [
CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("S1MPL3_KEY"), "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode(["ultimos4" => "0427", "monto" => 12500, "referencia_externa" => "ORD-1042"]),
]);
$d = json_decode(curl_exec($ch), true);Qué avisos sabemos leer hoy
Sin letra menuda: esto es lo que el código interpreta en este momento.
Con plantilla propia
- Banco de Costa RicaCorreo «Transacción SINPE MÓVIL»
- BAC CredomaticCorreo «Transferencia Local»
- Banco NacionalCorreo con el comprobante en PDF adjunto
- Banco PopularCorreo, y el mismo texto por SMS
Remitentes reconocidos, plantilla genérica
Para estos bancos aceptamos el correo y lo leemos buscando etiquetas como Monto, Referencia y Teléfono. Todavía no la probamos con avisos reales de cada uno.
/api/v1/ingest/sms con una app reenviadora, o pegalo en el panel. ¿Te escribe desde otro dominio? Agregalo como remitente permitido en el buzón.¿Tengo que darles la clave del banco?
No. Solo acceso de lectura al correo donde te llegan los avisos, con una contraseña de aplicación (no la principal). Se guarda cifrada con AES-256-GCM. No podemos ver tu cuenta ni mover dinero.
¿Cada cuánto revisan el correo?
Cada 30 segundos. Además, cuando verificás desde la caja forzamos una lectura del buzón antes de responder, por si el pago acaba de entrar.
¿Qué pasa si dos SINPE terminan en los mismos 4 dígitos?
La respuesta es «varios coinciden» y no se marca nada. Agregá el monto, el teléfono o la referencia completa y se resuelve.
¿Hasta cuándo puedo verificar un comprobante?
Buscamos entre los SINPE recibidos en los últimos 30 días.
El cliente me enseña el número corto del Banco Nacional, ¿sirve?
Sí. Del BN guardamos los dos comprobantes (el corto del correo y el largo del PDF) y los 4 dígitos de cualquiera de los dos funcionan.
¿Puedo probar la integración sin pagos reales?
Sí, si tu cuenta tiene el modo sandbox habilitado: POST /api/v1/sandbox/transacciones simula un SINPE recibido.
Dejá de abrir la app del banco cada vez que alguien dice «ya te lo pasé».
Las cuentas se abren a mano: pedile acceso a quien administra S1mpl3 y después conectás tu buzón desde el panel.