API do saci.cc
Uma API HTTP simples, sem cadastro e sem autenticação, para criar endereços temporários e ler os emails que chegam. Serve bem para testar cadastros e recuperação de senha de ponta a ponta.
URL base
https://saci.cc/api
Começo rápido
Crie um endereço, use-o onde precisar e espere o email chegar:
# 1. Criar um endereço
curl -X POST https://saci.cc/api/addresses
# 2. Esperar um email chegar (até 25 s)
curl "https://saci.cc/api/addresses/a1b2c3d4e5f60718@saci.cc/emails?wait=25"
# 3. Ler o email
curl "https://saci.cc/api/addresses/a1b2c3d4e5f60718@saci.cc/emails/{messageId}"// 1. Criar um endereço
const { address } = await fetch("https://saci.cc/api/addresses", { method: "POST" }).then((r) => r.json());
// 2. Esperar um email chegar (até 25 s)
const { emails } = await fetch(`https://saci.cc/api/addresses/${address}/emails?wait=25`).then((r) => r.json());
// 3. Ler o email
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. Criar um endereço
address = requests.post("https://saci.cc/api/addresses").json()["address"]
# 2. Esperar um email chegar (até 25 s)
emails = requests.get(f"https://saci.cc/api/addresses/{address}/emails", params={"wait": 25}).json()["emails"]
# 3. Ler o email
email = requests.get(f"https://saci.cc/api/addresses/{address}/emails/{emails[0]['messageId']}").json()
print(email["subject"], email["text"])Endpoints
Criar endereço
POST/addresses
Gera um endereço novo e aleatório. Não é preciso registrar nada: qualquer email enviado para ele fica disponível por cerca de um dia.
| Nome | Onde | Descrição |
|---|---|---|
name | query | Opcional. Nome do endereço (3 a 32 letras, números, pontos, hífens ou sublinhados). Sem ele, o nome é aleatório. |
curl -X POST https://saci.cc/api/addresses
Resposta · 201
{ "address": "a1b2c3d4e5f60718@saci.cc" }Listar emails
GET/addresses/{address}/emails
Lista os emails recebidos, do mais novo para o mais antigo. Com wait, a requisição fica aberta até chegar um email (no máximo 25 segundos), sem precisar consultar em loop.
| Nome | Onde | Descrição |
|---|---|---|
addressobrigatório | caminho | Endereço completo, por exemplo a1b2c3d4e5f60718@saci.cc |
wait | query | Segundos para esperar um email chegar, até 25. Sem ele, responde na hora. |
after | query | Data ISO 8601. Com wait, espera um email recebido depois dela. |
curl "https://saci.cc/api/addresses/a1b2c3d4e5f60718@saci.cc/emails?wait=25"
Resposta · 200
{
"emails": [
{
"messageId": "0100019a2b3c4d5e-6f7a8b9c-...",
"from": "GitHub <noreply@github.com>",
"subject": "[GitHub] Please verify your email address",
"receivedAt": "2026-10-20T15:30:00.000Z"
}
]
}Ler email
GET/addresses/{address}/emails/{messageId}
Devolve o conteúdo do email em HTML e em texto.
| Nome | Onde | Descrição |
|---|---|---|
addressobrigatório | caminho | Endereço completo, por exemplo a1b2c3d4e5f60718@saci.cc |
messageIdobrigatório | caminho | O messageId que veio na listagem |
curl "https://saci.cc/api/addresses/a1b2c3d4e5f60718@saci.cc/emails/{messageId}"Resposta · 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"
}
]
}Baixar anexo
GET/addresses/{address}/emails/{messageId}/attachments/{index}
Redireciona para um link de download do anexo, válido por alguns minutos. O índice vem da lista attachments do email.
| Nome | Onde | Descrição |
|---|---|---|
addressobrigatório | caminho | Endereço completo, por exemplo a1b2c3d4e5f60718@saci.cc |
messageIdobrigatório | caminho | O messageId que veio na listagem |
indexobrigatório | caminho | Posição do anexo na lista attachments, começando em 0 |
curl -L -OJ "https://saci.cc/api/addresses/a1b2c3d4e5f60718@saci.cc/emails/{messageId}/attachments/0"Resposta · 302
Apagar email
DELETE/addresses/{address}/emails/{messageId}
Apaga um email e os anexos dele. Responde 204, ou 404 se ele não existir.
| Nome | Onde | Descrição |
|---|---|---|
addressobrigatório | caminho | Endereço completo, por exemplo a1b2c3d4e5f60718@saci.cc |
messageIdobrigatório | caminho | O messageId que veio na listagem |
curl -X DELETE "https://saci.cc/api/addresses/a1b2c3d4e5f60718@saci.cc/emails/{messageId}"Resposta · 204
Esvaziar caixa
DELETE/addresses/{address}/emails
Apaga todos os emails da caixa e diz quantos eram.
| Nome | Onde | Descrição |
|---|---|---|
addressobrigatório | caminho | Endereço completo, por exemplo a1b2c3d4e5f60718@saci.cc |
curl -X DELETE "https://saci.cc/api/addresses/a1b2c3d4e5f60718@saci.cc/emails"
Resposta · 200
{ "deleted": 3 }Limites e erros
- 120 requisições por minuto por IP. Acima disso a resposta é 429, com o cabeçalho Retry-After dizendo quantos segundos esperar.
- O wait vai até 25 segundos por requisição. Se o tempo acabar, a resposta vem normalmente, com a lista atual (que pode estar vazia).
- Os emails são apagados cerca de um dia depois de chegar. Depois disso, a leitura responde 404.
- Endereço ou parâmetro inválido responde 400.
- Não há senha: quem souber o endereço consegue ler a caixa. Não use para nada sensível.
Usando com agentes de IA
Se você usa Claude, Cursor ou outro agente, o servidor MCP faz tudo isso sem você escrever código. Ver o servidor MCP
Esta documentação também está em texto puro para LLMs: /llms.txt · /llms-full.txt