API Documentation

Detailed API documentation for Read Hotmail & CheckLive TikTok services

Main endpoint to read emails from Hotmail/Outlook/Gmail via multiple methods: OAuth2 IMAP/POP3, OAuth2 Graph API, and Roundcube.
Main Endpoint
POST https://smail1s.com/get_messages
Request Parameters
TypeNameDescription
requireddataString containing email account info. One account per line.
OAuth/Graph: user@gmail.com|refresh_token|client_id|client_secret
Roundcube: user@wmhotmail.com|password
requiredmodeMailbox connection method. One of: oauth, graph, roundcube
oauth — Use refresh_token and client_id (from Azure AD app registration) to get access token automatically, no password needed.
graph — Use Microsoft Graph API to read emails directly from Microsoft.
roundcube — Connect directly to wmhotmail.com webmail server via IMAP.
Request Example
// OAuth2 / IMAP - Hotmail/Outlook
fetch('https://smail1s.com/get_messages', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    mode: 'oauth',
    data: 'user@outlook.com|refresh_token|client_id|client_secret'
  })
}).then(r => r.json()).then(console.log);

// OAuth2 Graph API
fetch('https://smail1s.com/get_messages', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    mode: 'graph',
    data: 'user@gmail.com|refresh_token|client_id|client_secret'
  })
}).then(r => r.json());
Response Parameters
TypeFieldDescription
optionaldata[].emailEmail address of the account
optionaldata[].messagesArray of emails, each has: from, subject, date, message, code, uid
from — Sender name
subject — Email subject
date — Email received time (format: YYYY-MM-DD HH:mm:ss)
message — Email body (HTML if starts with <, plain text otherwise)
code — Verification code auto-extracted from email (if any)
uid — Unique identifier UID of the email
optionaldata[].errorError message if reading email failed
Response Example (Success) — 200
{
  "data": [
    {
      "email": "user@outlook.com",
      "error": null,
      "mailSource": "oauth",
      "messages": [
        {
          "uid": "abc123def456",
          "from": "Google <no-reply@google.com>",
          "subject": "Mã xác nhận Google",
          "date": "2026-05-23 10:30:00",
          "message": "97530 là mã xác nhận của bạn",
          "code": "97530"
        }
      ]
    }
  ]
}
Response Example (Error) — 500
{
  "data": [
    {
      "email": null,
      "error": "Đã xảy ra lỗi hệ thống",
      "messages": []
    }
  ]
}
Roundcube — Connect directly to wmhotmail.com webmail server via IMAP.. Server mặc định: http://mail.wmhotmail.com. Có thể truyền roundcubeBaseUrl để dùng server khác.
Request Parameters
TypeNameDescription
requireddataString containing email account info. One account per line.
Roundcube: user@wmhotmail.com|password
requiredmodeGiá trị: roundcube
optionalroundcubeBaseUrlURL server Roundcube (mặc định: http://mail.wmhotmail.com)
Request Example
// Roundcube - Get Code wmhotmail.com
fetch('https://smail1s.com/get_messages', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    mode: 'roundcube',
    data: 'user@wmhotmail.com|password123'
  })
}).then(r => r.json());
Response Example (Success) — 200
{
  "data": [
    {
      "email": "user@wmhotmail.com",
      "error": null,
      "mailSource": "roundcube",
      "messages": [
        {
          "uid": "44",
          "from": "Google <no-reply@google.com>",
          "subject": "Mã xác minh",
          "date": "2026-05-23 10:30",
          "code": "892073",
          "message": "892073 là mã xác nhận của bạn"
        }
      ]
    }
  ]
}
Gmail Edu API with realtime support - automatically receive new emails via Socket.io or HTTP polling fallback. Best for apps needing fast verification codes (OTP, 2FA, account verification).
Get Gmail Edu emails + Realtime notification
POST https://smail1s.com/get_messages

Read emails from Gmail Edu account. After calling, the system will subscribe to this email to receive new emails via Socket.io or HTTP polling (every 12 seconds).

Request Parameters
TypeNameDescription
requireddataEmailEdu chỉ cần email (không cần password): user@emailfake.com
requiredmodeGiá trị: emailfake
Request Example
// EmailFake - Gmail Edu (không cần password)
fetch('https://smail1s.com/get_messages', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    mode: 'emailfake',
    data: 'user@emailfake.com'
  })
}).then(r => r.json());
Response Example (Success) — 200
{
  "data": [
    {
      "email": "user@emailfake.com",
      "error": null,
      "mailSource": "emailfake",
      "messages": [
        {
          "uid": "a1b2c3d4e5f678901234567890123456",
          "from": "Meta",
          "subject": "Your Instagram code",
          "date": "2026-05-23T10:30:00.000Z",
          "code": "654321"
        }
      ]
    }
  ]
}
Get specific email details
POST https://smail1s.com/api/emailfake/detail
After getting UID from /get_messages, call this endpoint to get full content.
Request Parameters
TypeNameDescription
requiredemailEmail address to get details for
requireduidUID of the email to get details
optionalsubjectFallback email subject — used when not found on page
optionalfromFallback sender — used when not found on page
Request Example
// Lấy chi tiết 1 email
fetch('https://smail1s.com/api/emailfake/detail', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    email: "user@emailfake.com",
    uid: "a1b2c3d4e5f678901234567890123456",
    subject: "Your Instagram code",
    from: "Meta"
  })
}).then(r => r.json());
Response Example (Success) — 200
{
  "success": true,
  "detail": {
    "subject": "Your Instagram code",
    "from": "Meta",
    "bodyHtml": "<div>...full HTML content...</div>",
    "bodyText": "Your Instagram verification code is 654321...",
    "code": "654321"
  }
}
Fallback: If Puppeteer cannot retrieve content (email contains only images), server returns fallback with subject and message that content is unavailable.
Receive realtime new emails via WebSocket

Use Socket.io to receive new emails immediately when they arrive. If Socket.io is unavailable, the system automatically falls back to HTTP polling every 12 seconds.

Connection: io('https://smail1s.com')
Namespace: Root / | Transport: websocket (auto fallback: polling)
Client Events (Emit) / Server Events (Listen)
DirectionEventDescription
Emitemail:subscribeSubscribe to an email. Server will start sending new emails to this email.
Emitemail:unsubscribeUnsubscribe from an email.
Emitemail:known_uidsGửi UIDs đã load để server không thông báo lại
Listenemail:newNew email received. Payload includes: email, uid, from, subject, body, code, isHtml
Listenemail:subscribedConfirmation of successful subscription.
Socket.io Payload Example (email:new)
// socket.emit('email:subscribe', 'user@emailfake.com')
// socket.on('email:new', (data) => { ... })

{
  "email": "user@emailfake.com",
  "uid": "f1e2d3c4b5a697801234567890123456",
  "from": "Meta",
  "subject": "Your Instagram code",
  "body": "<div>...</div>",
  "code": "654321",
  "isHtml": true,
  "timestamp": "2026-05-23T10:35:00.000Z"
}
Full Socket.io Integration
// 1. Kết nối Socket.io
const socket = io('https://smail1s.com');

// 2. Subscribe email
socket.emit('email:subscribe', 'user@emailfake.com');

// 3. Gửi known_uids (tránh thông báo lại email đã load)
socket.emit('email:known_uids', {
  email: 'user@emailfake.com',
  uids: ['abc123', 'def456']
});

// 4. Lắng nghe email mới
socket.on('email:new', (data) => {
});

// 5. Fallback: HTTP polling khi không có Socket.io
async function pollEmail(email) {
  const res = await fetch('https://smail1s.com/get_messages', {
    method: 'POST',
    body: JSON.stringify({ mode: 'emailfake', data: email })
  });
  return res.json();
}
setInterval(() => pollEmail('user@emailfake.com'), 12000); // 12s
API to check TikTok account status: LIVE (active), DIE (dead/expired), UNKNOWN (undetermined). Supports private proxy for bulk checking.
Check status of 1 TikTok account
POST https://smail1s.com/api/check-tiktok-single

Check the status of a TikTok account. Supports multiple input data formats from username only to full account information.

Request Parameters
TypeNameDescription
requiredlineTikTok account info to check. Supports multiple formats:
Username only: tiktok_user
Full: user123|password|email@gmail.com|pwd|refresh_token|client_id
optionaluseProxyEnable/disable proxy. Default: false
optionalproxyKeyProxy info (required if useProxy: true)
31.59.20.176:6754:username:password
Request Example
fetch('https://smail1s.com/api/check-tiktok-single', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    line: 'tiktok_user|password123',
    useProxy: true,
    proxyKey: '31.59.20.176:6754:username:password'
  })
}).then(r => r.json());
Response Parameters
TypeFieldDescription
optionalsuccessTrue if request is successful (not account status)
optionalaccountChuỗi tài khoản gốc đã gửi lên
optionalstatusAccount status: live (active), die (dead/expired), unknown (undetermined)
LIVE — Account is active and working
DIE — Account is dead (cookie/token expired or invalid)
UNKNOWN — Cannot determine (network error, TikTok server error)
optionalmessageDetailed message about status or error
Request successful (account status is in status field) — 200
{
  "success": true,
  "account": "tiktok_user|password123",
  "status": "live",
  "message": "LIVE"
}
Invalid input data — 400
{
  "success": false,
  "message": "Thiếu dữ liệu tài khoản để check!"
}
Server error when checking TikTok — 500
{
  "success": false,
  "message": "Lỗi server: ..."
}
Check multiple accounts at once

To check in bulk, call /api/check-tiktok-single for each account. The system supports parallel calls - you can send all requests at the same time.

No request limit: You can call all accounts in parallel.
Proxy: Each proxy can be used for multiple accounts (system auto-cycles).
Timeout: Each request has 60 seconds timeout.
Batch Example Flow (JavaScript)
// Batch check TikTok - parallel requests
async function checkAllAccounts(accounts, proxies = []) {
  const results = await Promise.all(
    accounts.map((line, idx) => {
      const proxyKey = proxies[idx % proxies.length];
      return fetch('https://smail1s.com/api/check-tiktok-single', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          line: line,
          useProxy: !!proxyKey,
          proxyKey: proxyKey || undefined
        })
      }).then(r => r.json());
    })
  );

  const live    = results.filter(r => r.status === 'live');
  const die     = results.filter(r => r.status === 'die');
  const unknown = results.filter(r => r.status === 'unknown');

  return { live, die, unknown, all: results };
}

// Usage
const accounts = ['user1', 'user2|password', 'user3|pass|email@x.com|pwd|refresh|clientid'];
const proxies  = ['31.59.20.176:6754:user:pass'];
checkAllAccounts(accounts, proxies);
TempMail API v2 — Create temporary email addresses with automatic OTP extraction. Each mailbox lasts 15 minutes, supports realtime Socket.io.
Get domain list
GET https://smail1s.com/api/v2/mail/domains

Get available domains for creating mailboxes

Request Example
fetch('https://smail1s.com/api/v2/mail/domains')
  .then(r => r.json())
  .then(console.log);
Response — 200
{
  "success": true,
  "domains": ["smail1s.com"]
}
Create mailbox
POST https://smail1s.com/api/v2/mail/create

Create new mailbox (random or custom), lifetime: 15 minutes

Body Parameters (JSON)
TypeNameDescription
optionalmailboxMailbox name (a-z0-9._-, 1-32 chars). Leave empty = random
optionaldomainDomain to use. Leave empty = use first domain
Request Example
// Create random email
fetch('https://smail1s.com/api/v2/mail/create', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({})
}).then(r => r.json());

// Create custom email
fetch('https://smail1s.com/api/v2/mail/create', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    mailbox: 'mytest123',
    domain: 'smail1s.com'
  })
}).then(r => r.json());
Response — 201
{
  "success": true,
  "email": "a1b2c3d4e5f6@smail1s.com",
  "expiresAt": "2026-08-13T10:45:00.000Z"
}
Get email list
POST https://smail1s.com/api/v2/mail/inbox

Get all emails in inbox (sorted by UID descending)

Body Parameters (JSON)
TypeNameDescription
requiredemailEmail address to read inbox
Request Example
fetch('https://smail1s.com/api/v2/mail/inbox', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    email: 'a1b2c3d4e5f6@smail1s.com'
  })
}).then(r => r.json());
Response — 200
{
  "messages": [
    {
      "uid": 42,
      "subject": "Your verification code",
      "from": "Google <no-reply@google.com>",
      "date": "2026-08-13T10:30:00.000Z",
      "preview": "Your verification code is 456745...",
      "hasAttachments": false
    }
  ]
}
Email details
POST https://smail1s.com/api/v2/mail/detail

Get full content of an email (HTML, text, attachments)

Body Parameters (JSON)
TypeNameDescription
requiredemailEmail address
requireduidEmail UID (from inbox)
Request Example
fetch('https://smail1s.com/api/v2/mail/detail', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    email: 'a1b2c3d4e5f6@smail1s.com',
    uid: 42
  })
}).then(r => r.json());
Response — 200
{
  "uid": 42,
  "subject": "Your verification code",
  "from": "Google <no-reply@google.com>",
  "to": "a1b2c3d4e5f6@smail1s.com",
  "cc": "",
  "replyTo": "",
  "date": "2026-08-13T10:30:00.000Z",
  "html": "<div>Your verification code is <strong>456745</strong></div>",
  "text": "Your verification code is 456745",
  "attachments": []
}
Read OTP (long-polling 60s)
GET https://smail1s.com/api/v2/mail/otp?email={email}

Wait and extract OTP from latest email (timeout 60s). Response: text/plain

Long-polling: This request will wait up to 60 seconds for a new email with OTP. Call only once after registration.
Request Example
// Response is plain text (NOT JSON), use .text()
const otp = await fetch(
  'https://smail1s.com/api/v2/mail/otp?email=a1b2c3d4e5f6@smail1s.com'
).then(r => r.text());
Response — 200 (Content-Type: text/plain)
456745
If timeout or no OTP, response body will be empty (empty string).
🚀 Create + OTP Combined (Special Endpoint)
GET (Recommended for automation)
GET https://smail1s.com/api/v2/mail/create-and-otp?email={email}

Create mailbox (if not exists) or reuse (if exists) + wait for OTP in 1 single request (long-polling 60s). Response: text/plain containing OTP.

Note: OTP is returned only once. Next call with same email returns empty if no new OTP, or returns new OTP if new mail arrives.
Use case: Automation tools need to auto-create email + get OTP with just 1 URL. Perfect for browser extensions, Selenium, or automation scripts.
Query Parameters
TypeNameDescription
requiredemailĐịa chỉ email đầy đủ (vd: test123@smail1s.com). Nếu chưa tồn tại sẽ tự động tạo mới.
Request Example
// Cách 1: Dùng trực tiếp trong browser hoặc curl
// Browser: Copy URL này vào address bar
https://smail1s.com/api/v2/mail/create-and-otp?email=test123@smail1s.com

// Terminal: curl
curl "https://smail1s.com/api/v2/mail/create-and-otp?email=test123@smail1s.com"

// Cách 2: JavaScript fetch (long-polling 60s)
const email = 'test123@smail1s.com';

// Gọi API và đợi OTP
const otp = await fetch(
  `https://smail1s.com/api/v2/mail/create-and-otp?email=${encodeURIComponent(email)}`
).then(r => r.text());

if (otp) {
  // Dùng email để đăng ký service
  await registerService(email);
  // Verify với OTP
  await verifyWithOTP(otp);
} else {
}

// Gọi lần 2 với cùng email → trả rỗng (OTP đã consumed)
const otp2 = await fetch(
  `https://smail1s.com/api/v2/mail/create-and-otp?email=${encodeURIComponent(email)}`
).then(r => r.text());

// Nếu có mail OTP mới → gọi lại sẽ nhận OTP mới
Response — 200 (Content-Type: text/plain)
456745
POST (Legacy, still works)
POST https://smail1s.com/api/v2/mail/create-and-otp

POST version trả về JSON với email address, sau đó cần gọi /otp riêng để lấy OTP.

Request Example
const { email } = await fetch('https://smail1s.com/api/v2/mail/create-and-otp', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ mailbox: 'test123' })
}).then(r => r.json());

// Dùng email để đăng ký
await registerService(email);

// Đọc OTP qua endpoint riêng
const otp = await fetch(
  `https://smail1s.com/api/v2/mail/otp?email=${encodeURIComponent(email)}`
).then(r => r.text());
💡 This endpoint supports both GET and POST. GET method allows direct use in browser address bar or simple automation tools. Email param: ?email=yourname@smail1s.com
Full Usage Flow
// ========== FLOW 1: Tách biệt (Create riêng + OTP riêng) ==========

// 1. Tạo mailbox
const { email } = await fetch('https://smail1s.com/api/v2/mail/create', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({})
}).then(r => r.json());

// 2. Đăng ký dịch vụ bên thứ 3
await registerThirdPartyService(email);

// 3. Đợi OTP (long-polling 60s)
const otp = await fetch(
  `https://smail1s.com/api/v2/mail/otp?email=${encodeURIComponent(email)}`
).then(r => r.text());

if (otp) {
  await verifyWithOTP(otp);
}

// ========== FLOW 2: Combined (tối ưu cho automation) ==========

// Tạo mailbox qua create-and-otp
const { email: email2 } = await fetch('https://smail1s.com/api/v2/mail/create-and-otp', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({})
}).then(r => r.json());

// Đăng ký dịch vụ với tracking param
await registerService({
  email: email2,
  callbackUrl: `https://app.com/verify?localPath=${encodeURIComponent(email2)}`
});

// Đợi OTP - có thể gọi ngay sau khi đăng ký
const otp2 = await fetch(
  `https://smail1s.com/api/v2/mail/otp?email=${encodeURIComponent(email2)}`
).then(r => r.text());

if (otp2) {
  await verifyWithOTP(otp2);
}

// ========== FLOW 3: Kiểm tra inbox thủ công ==========

// Lấy danh sách email
const { messages } = await fetch('https://smail1s.com/api/v2/mail/inbox', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ email: email })
}).then(r => r.json());

// Đọc chi tiết email đầu tiên
if (messages.length > 0) {
  const detail = await fetch('https://smail1s.com/api/v2/mail/detail', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      email: email,
      uid: messages[0].uid
    })
  }).then(r => r.json());

}