API de saci.cc
Una API HTTP sencilla, sin registro y sin autenticación, para crear direcciones temporales y leer los correos que reciben. Útil para probar de punta a punta registros y recuperación de contraseña.
URL base
https://saci.cc/api
Inicio rápido
Crea una dirección, úsala donde la necesites y espera el correo:
# 1. Crear una dirección
curl -X POST https://saci.cc/api/addresses
# 2. Esperar un correo (hasta 25 s)
curl "https://saci.cc/api/addresses/a1b2c3d4e5f60718@saci.cc/emails?wait=25"
# 3. Leer el correo
curl "https://saci.cc/api/addresses/a1b2c3d4e5f60718@saci.cc/emails/{messageId}"// 1. Crear una dirección
const { address } = await fetch("https://saci.cc/api/addresses", { method: "POST" }).then((r) => r.json());
// 2. Esperar un correo (hasta 25 s)
const { emails } = await fetch(`https://saci.cc/api/addresses/${address}/emails?wait=25`).then((r) => r.json());
// 3. Leer el correo
const email = await fetch(`https://saci.cc/api/addresses/${address}/emails/${emails[0].messageId}`).then((r) => r.json());
console.log(email.subject, email.text);import requests
# 1. Crear una dirección
address = requests.post("https://saci.cc/api/addresses").json()["address"]
# 2. Esperar un correo (hasta 25 s)
emails = requests.get(f"https://saci.cc/api/addresses/{address}/emails", params={"wait": 25}).json()["emails"]
# 3. Leer el correo
email = requests.get(f"https://saci.cc/api/addresses/{address}/emails/{emails[0]['messageId']}").json()
print(email["subject"], email["text"])Endpoints
Crear dirección
POST/addresses
Genera una dirección nueva y aleatoria. No hay que registrar nada: cualquier correo enviado a ella está disponible durante un día, más o menos.
| Nombre | Dónde | Descripción |
|---|---|---|
name | query | Opcional. Nombre de la dirección (3 a 32 letras, números, puntos, guiones o guiones bajos). Aleatorio si se omite. |
curl -X POST https://saci.cc/api/addresses
Respuesta · 201
{ "address": "a1b2c3d4e5f60718@saci.cc" }Listar correos
GET/addresses/{address}/emails
Lista los correos recibidos, del más nuevo al más antiguo. Con wait, la solicitud queda abierta hasta que llega un correo (25 segundos como máximo), sin tener que consultar en bucle.
| Nombre | Dónde | Descripción |
|---|---|---|
addressobligatorio | ruta | Dirección completa, por ejemplo a1b2c3d4e5f60718@saci.cc |
wait | query | Segundos para esperar un correo, hasta 25. Sin él, responde al instante. |
after | query | Fecha ISO 8601. Con wait, espera un correo recibido después de ella. |
curl "https://saci.cc/api/addresses/a1b2c3d4e5f60718@saci.cc/emails?wait=25"
Respuesta · 200
{
"emails": [
{
"messageId": "0100019a2b3c4d5e-6f7a8b9c-...",
"from": "GitHub <noreply@github.com>",
"subject": "[GitHub] Please verify your email address",
"receivedAt": "2026-10-20T15:30:00.000Z"
}
]
}Leer correo
GET/addresses/{address}/emails/{messageId}
Devuelve el contenido del correo en HTML y en texto.
| Nombre | Dónde | Descripción |
|---|---|---|
addressobligatorio | ruta | Dirección completa, por ejemplo a1b2c3d4e5f60718@saci.cc |
messageIdobligatorio | ruta | El messageId que vino en la lista |
curl "https://saci.cc/api/addresses/a1b2c3d4e5f60718@saci.cc/emails/{messageId}"Respuesta · 200
{
"messageId": "0100019a2b3c4d5e-6f7a8b9c-...",
"from": "GitHub <noreply@github.com>",
"subject": "[GitHub] Please verify your email address",
"receivedAt": "2026-10-20T15:30:00.000Z",
"html": "<p>Your code is <b>482913</b></p>",
"text": "Your code is 482913",
"attachments": [
{
"index": 0,
"filename": "invoice.pdf",
"contentType": "application/pdf",
"size": 48213,
"inline": false,
"url": "https://saci.cc/api/addresses/a1b2c3d4e5f60718@saci.cc/emails/0100019a2b3c4d5e-6f7a8b9c-.../attachments/0"
}
]
}Descargar adjunto
GET/addresses/{address}/emails/{messageId}/attachments/{index}
Redirige a un enlace de descarga del adjunto, válido por unos minutos. El índice viene de la lista attachments del correo.
| Nombre | Dónde | Descripción |
|---|---|---|
addressobligatorio | ruta | Dirección completa, por ejemplo a1b2c3d4e5f60718@saci.cc |
messageIdobligatorio | ruta | El messageId que vino en la lista |
indexobligatorio | ruta | Posición del adjunto en la lista attachments, empezando en 0 |
curl -L -OJ "https://saci.cc/api/addresses/a1b2c3d4e5f60718@saci.cc/emails/{messageId}/attachments/0"Respuesta · 302
Borrar correo
DELETE/addresses/{address}/emails/{messageId}
Borra un correo y sus adjuntos. Responde 204, o 404 si no existe.
| Nombre | Dónde | Descripción |
|---|---|---|
addressobligatorio | ruta | Dirección completa, por ejemplo a1b2c3d4e5f60718@saci.cc |
messageIdobligatorio | ruta | El messageId que vino en la lista |
curl -X DELETE "https://saci.cc/api/addresses/a1b2c3d4e5f60718@saci.cc/emails/{messageId}"Respuesta · 204
Vaciar bandeja
DELETE/addresses/{address}/emails
Borra todos los correos de la bandeja y dice cuántos había.
| Nombre | Dónde | Descripción |
|---|---|---|
addressobligatorio | ruta | Dirección completa, por ejemplo a1b2c3d4e5f60718@saci.cc |
curl -X DELETE "https://saci.cc/api/addresses/a1b2c3d4e5f60718@saci.cc/emails"
Respuesta · 200
{ "deleted": 3 }Límites y errores
- 120 solicitudes por minuto por IP. Por encima, la respuesta es 429, con la cabecera Retry-After indicando cuántos segundos esperar.
- wait llega hasta 25 segundos por solicitud. Si se acaba el tiempo, la respuesta llega normal, con la lista actual (que puede estar vacía).
- Los correos se borran un día después de llegar, más o menos. Después, leerlos devuelve 404.
- Una dirección o parámetro inválido devuelve 400.
- No hay contraseña: quien conozca la dirección puede leer su bandeja. No la uses para nada delicado.
Con agentes de IA
Si usas Claude, Cursor u otro agente, el servidor MCP hace todo esto sin escribir código. Ver el servidor MCP
Esta documentación también está en texto plano para LLMs: /llms.txt · /llms-full.txt