A
ARUX Mail
Docs API
Inbox Admin

Integrasi bot

Pakai ARUX Mail dari bot.

Alur lengkap: ambil alamat, tunggu email masuk, baca OTP atau link verifikasi, lalu simpan token untuk pemulihan sesi.

Daftar isi

Model akses

Tidak ada akun, cookie, atau login. Setiap mailbox punya alamat dan token. Alamat bersifat permanen; pesan dihapus otomatis 24 jam setelah diterima.

Base URLhttps://aruxmail.tech (HTTP dan www dialihkan ke sini)
Domain emailLihat GET /api/domains. aruxmail.tech adalah domain web/API, bukan domain penerima email.
AuthHeader Authorization: Bearer <token>. Inbox juga butuh ?email=; token saja cukup untuk /api/session.
TokenDitampilkan sekali saat mailbox dibuat. Server hanya menyimpan hash SHA-256. Token bisa dipakai untuk menemukan alamat lewat /api/session.
AlamatDua mode: random (aru + 12 hex) atau nama sendiri (3–32 karakter: huruf kecil, angka, titik, _, -).
Retensi pesan24 jam sejak diterima, dibersihkan cron tiap jam.

Token = kunci inbox. Siapa pun yang punya token bisa membaca inbox tersebut. Simpan di tempat aman dan jangan tulis ke log.

Endpoint publik

MethodPathFungsi
GET/api/domainsDaftar domain aktif yang bisa dipakai.
POST/api/mailboxesBuat mailbox. Body: {"domain":"aruxshop.my.id"} atau tambah "name":"namakamu".
GET/api/sessionCari alamat dari token saja. Butuh header Bearer; balas { email, name, expires_at, permanent }.
GET/api/inbox?email=Daftar pesan (maks 100). Butuh token.
GET/api/messages/:id?email=Detail pesan: teks, OTP, links, raw email. Butuh token.
GET/api/healthCek status service.

Tidak ada endpoint untuk reset token. Token yang hilang hanya bisa diganti manual oleh pemilik server (update token_hash di D1).

Alur bot (contoh: daftar CapCut)

  1. Ambil domain — GET /api/domains, pilih salah satu yang aktif.
  2. Buat mailbox — POST /api/mailboxes dengan domain tadi, tambahkan "name" kalau ingin alamat sendiri (kalau tidak, alamat random). Simpan email dan token.
  3. Isi form pendaftaran — masukkan email ke form signup CapCut, submit, lalu tunggu halaman minta verifikasi.
  4. Polling inbox — GET /api/inbox?email=... tiap 5–10 detik (batas 120 req/menit). Berhenti saat messages.length > 0.
  5. Baca pesan — GET /api/messages/:id?email=.... Ambil otp kalau ada; kalau tidak, pilih link verifikasi dari links.
  6. Lanjutkan pendaftaran — isi OTP atau buka link. Simpan email + token di database bot untuk pemulihan sesi nanti.

CapCut bisa mengirim OTP 6 digit atau link verifikasi, tergantung alur dan region. Kode contoh di bawah menangani keduanya: pakai otp jika ada, jika tidak cari link yang host-nya cocok.

Contoh kode

1 · Buat mailbox (curl)

# alamat random
curl -s -X POST https://aruxmail.tech/api/mailboxes \
  -H "Content-Type: application/json" \
  -d '{"domain":"aruxshop.my.id"}'

# nama sendiri (3–32 karakter)
curl -s -X POST https://aruxmail.tech/api/mailboxes \
  -H "Content-Type: application/json" \
  -d '{"domain":"aruxshop.my.id","name":"capcutbot"}'

Respons 201:

{
  "email": "capcutbot@aruxshop.my.id",
  "token": "64 karakter hex — simpan sekarang",
  "expires_at": 0,
  "permanent": true,
  "retention_hours": 24,
  "message_retention_hours": 24
}

2 · Node.js (fetch)

const BASE = "https://aruxmail.tech";

async function createMailbox(domain) {
  const res = await fetch(`${BASE}/api/mailboxes`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ domain })
  });
  if (!res.ok) throw new Error(`create ${res.status}: ${await res.text()}`);
  return res.json(); // { email, token, ... }
}

async function waitForMessage(email, token, { timeoutMs = 180000, intervalMs = 5000 } = {}) {
  const deadline = Date.now() + timeoutMs;
  while (Date.now() < deadline) {
    const res = await fetch(`${BASE}/api/inbox?email=${encodeURIComponent(email)}`, {
      headers: { Authorization: `Bearer ${token}` }
    });
    if (res.status === 429) {
      const retry = Number(res.headers.get("Retry-After") || 5);
      await new Promise((r) => setTimeout(r, retry * 1000));
      continue;
    }
    if (!res.ok) throw new Error(`inbox ${res.status}: ${await res.text()}`);
    const { messages } = await res.json();
    if (messages.length) return messages[0];
    await new Promise((r) => setTimeout(r, intervalMs));
  }
  throw new Error("Timeout menunggu email");
}

async function readMessage(id, email, token) {
  const res = await fetch(
    `${BASE}/api/messages/${id}?email=${encodeURIComponent(email)}`,
    { headers: { Authorization: `Bearer ${token}` } }
  );
  if (!res.ok) throw new Error(`message ${res.status}: ${await res.text()}`);
  return (await res.json()).message; // { otp, links, text, ... }
}

3 · CapCut: email → OTP/link

const box = await createMailbox("aruxshop.my.id");

// ... isi form signup CapCut dengan box.email, submit ...

const summary = await waitForMessage(box.email, box.token);
const msg = await readMessage(summary.id, box.email, box.token);

const otp = msg.otp || null; // contoh: "482913"
const verifyLink = msg.links.find((item) => {
  try {
    return /(^|\.)capcut\.com$/i.test(new URL(item.url).host);
  } catch {
    return false;
  }
}) || msg.links[0] || null;

if (otp) {
  // isi input OTP di halaman verifikasi
} else if (verifyLink) {
  // buka verifyLink.url
} else {
  throw new Error("Email masuk tapi tidak ada OTP/link yang cocok");
}

4 · Python (requests)

import time
import requests

BASE = "https://aruxmail.tech"

box = requests.post(
    f"{BASE}/api/mailboxes",
    json={"domain": "aruxshop.my.id"},
    timeout=20,
).json()
email, token = box["email"], box["token"]
headers = {"Authorization": f"Bearer {token}"}

deadline = time.time() + 180
message = None
while time.time() < deadline:
    res = requests.get(
        f"{BASE}/api/inbox",
        params={"email": email},
        headers=headers,
        timeout=20,
    )
    if res.status_code == 429:
        time.sleep(int(res.headers.get("Retry-After", 5)))
        continue
    res.raise_for_status()
    messages = res.json()["messages"]
    if messages:
        message = messages[0]
        break
    time.sleep(5)

detail = requests.get(
    f"{BASE}/api/messages/{message['id']}",
    params={"email": email},
    headers=headers,
    timeout=20,
).json()["message"]

print("OTP:", detail.get("otp"))
print("Links:", detail.get("links"))

Pemulihan sesi

Sesi bot tidak disimpan di server. Yang perlu disimpan hanya email + token; kapan pun bisa dipakai lagi.

Via UI

Buka halaman inbox → bagian Pulihkan sesi → tempel token saja → Buka inbox. Alamat email ditemukan otomatis dari token.

Via API (token → alamat)

curl -s https://aruxmail.tech/api/session \
  -H "Authorization: Bearer <TOKEN>"

Balasan: {"email":"capcutbot@aruxshop.my.id","name":"capcutbot","expires_at":0,"permanent":true}. 401 = token tidak valid.

Via API (buka inbox)

curl -s "https://aruxmail.tech/api/inbox?email=capcutbot@aruxshop.my.id" \
  -H "Authorization: Bearer <TOKEN>"

Via browser (localStorage)

localStorage.setItem("aruxmail_inbox_v1", JSON.stringify({
  email: "capcutbot@aruxshop.my.id",
  token: "<TOKEN>",
  expires_at: 0
}));
location.reload();

Token tidak bisa di-recover dari server. Kalau hilang, minta pemilik server mengganti token_hash mailbox; token lama otomatis tidak berlaku.

Batas & retensi

AksiBatas
Buat mailbox3 / menit dan 10 / jam per IP
Percobaan buat mailbox (termasuk format salah)30 / menit per IP
Baca inbox120 / menit per IP
Baca detail pesan120 / menit per IP
Ukuran emailMaks 5 MiB
Umur pesan24 jam sejak diterima
Umur alamatPermanen sampai dihapus admin

Kalau kena 429, hormati header Retry-After. Untuk bot dengan banyak akun, jangan membuat mailbox lebih cepat dari batas — siapkan antrean dan jeda.

Error umum

StatusArtiSolusi
400Body/domain tidak validKirim JSON {"domain":"..."} yang benar.
401Email/token salahPakai token asli; cek alamat tidak typo.
409Domain belum aktif/verifiedHubungi admin untuk aktivasi domain.
429Rate limitTunggu sesuai Retry-After.
413Body terlalu besarKirim JSON kecil (maks 16 KiB).
404Pesan tidak ditemukan / sudah dihapusCek ID; pesan mungkin lewat 24 jam.
502Pemeriksaan DNS admin gagalHanya untuk endpoint admin; coba lagi.

Keamanan