/* ⭐ Переключатель языка. Скромный намеренно: это служебная кнопка, а не содержание страницы. */ .langbar{display:flex;gap:2px;justify-content:flex-end;margin:0 0 18px} .langbar button{border:1px solid var(--line);background:none;color:var(--mute);cursor:pointer; padding:4px 11px;font:13px/1 inherit;border-radius:6px} .langbar button.on{background:var(--ink);color:#fff;border-color:var(--ink)} .langbar button:hover{color:var(--ink)} [data-lang][hidden]{display:none}

inboxotp — описание вызовов

Одноразовые почтовые адреса с готовым кодом. Формат вызовов — ваш собственный: менять у себя ничего не нужно, достаточно поменять адрес сервера и ключ.

Адресhttps://api.inboxotp.online
МетодGET или POST — как удобнее. Ответ JSON в UTF-8
Ключпараметр api_key, параметр key или заголовок X-Api-Key — принимаем любой
Домен адресовicloud.com, он один и не выбирается
Проверка связи/ping — без ключа, отвечает {"status":"ok"}

Как это работает

  1. Ваша программа просит адрес — getActivation.
  2. Пользователь регистрируется на нужном сайте, указав этот адрес.
  3. Письмо приходит нам, мы сами разбираем его и достаём код.
  4. Вы спрашиваете getCode, пока код не придёт.
  5. Получили — setStatus&status=3. Не понадобилось — status=2, и денег не спишем.
Код разбираем мы. Вам приходит готовый код строкой — письмо парсить не нужно. Если кода мало (подтверждение бывает ссылкой), есть отдельный вызов за письмом целиком.

Вызовы

Все на пути /api/mail/…, ответ вида {"status":1,…} при успехе и {"status":0,"error":"…"} при отказе.

getActivation?api_key=КЛЮЧ&service=dr
взять адрес. → {"status":1,"mail":"…@icloud.com","mailId":123}
Деньги здесь ещё не списываются.
getCode?api_key=КЛЮЧ&mailId=123
забрать код. → {"status":1,"code":"505254"}
Спрашивать повторно, раз в 3–5 секунд. В этот момент списываются деньги.
setStatus?api_key=КЛЮЧ&id=123&status=3 — закрыть успешно, адрес сразу освобождается
…&status=2 — отменить
…&status=5 — жду ещё один код, заказ остаётся открытым
getLetter?api_key=КЛЮЧ&mailId=123
письмо целиком — наше дополнение сверх вашего описания, в том же формате. &raw=1 добавит исходник со служебными строками.
getPriceRests?api_key=КЛЮЧ&service=dr
цена и остаток. → {"status":1,"data":{"dr":{"icloud.com":{"price":0.1,"count":5087}}}}
getMailServicesList/stubs/handler_api.php?api_key=КЛЮЧ&action=getMailServicesList
список сервисов с названиями
getBalance/stubs/handler_api.php?api_key=КЛЮЧ&action=getBalance
→ ACCESS_BALANCE:9.10
Номер или адрес — как удобнее. Везде, где ждём mailId или id, принимаем и сам адрес: mail=имя@icloud.com. Хранить наш номер у себя не обязательно.

Письмо целиком

Нужно, когда подтверждение приходит ссылкой, а не кодом, или когда важны детали письма.

GET /api/mail/getLetter?api_key=КЛЮЧ&mailId=123

{"status":1,
 "mail":"sequent_patron6h@icloud.com",
 "subject":"тема письма",
 "from":"noreply@verify.proton.me",
 "from_domain":"verify.proton.me",
 "received_at":"2026-09-03 04:47:04",
 "text":"весь читаемый текст письма",
 "code":"505254"}
from — настоящий отправитель, полным адресом. В самом письме он спрятан за служебной маской пересылки вида "noreply@verify.proton.me" <noreply_at_verify_proton_me_zwmpd61@icloud.com> — мы её разворачиваем и отдаём то, что отправитель написал бы у себя: noreply@verify.proton.me. Рядом, в from_domain, лежит только домен — если вы сверяете отправителя по домену, берите это поле.
Письмо живёт, пока жив заказ. Закрыли заказ или прошли 25 минут — адрес возвращается на склад, ящик очищается, и письма больше нет. Нужен текст — забирайте до закрытия.

То же самое можно получить вместе с кодом, одним ответом: getCode&mailId=123&full=1 добавит поле letter.

Цикл

getActivation                       -> mailId
getCode  раз в 3-5 секунд           -> пришёл?  setStatus status=3
                                       нет?     ждать, окно 25 минут
Уведомлений о письме нет — спрашивайте статус сами. Чаще, чем раз в 3 секунды, смысла нет: мы и сами заглядываем в почту раз в 5 секунд, быстрее код не появится.

Второй код на тот же адрес

Сайты часто присылают код повторно: «не пришло? отправить ещё раз». Чтобы дождаться второго письма, не покупая новый адрес, поставьте статус 5 вместо 3.

getCode                             -> первый код получен
setStatus id=123&status=5           -> жду ещё один
getCode  раз в 3-5 секунд           -> вернётся САМЫЙ СВЕЖИЙ код
setStatus id=123&status=3           -> всё получил, закрываем
Доплаты нет. Деньги списываются за активацию, а не за письмо: сколько бы кодов ни пришло на этот адрес за 25 минут, заплатите один раз.
Окно25 минут суммарно на активацию, на любое число писем
Что вернёт getCodeсамый свежий код из пришедших. Пока нового письма нет — прежний код, тот же самый
Когда закрыватьстатусом 3, когда получили всё нужное. Не закрыли — адрес освободится сам по истечении окна
Один адрес — одна регистрация. Статус 5 нужен для второго письма в рамках ОДНОЙ регистрации. Зарегистрировать на один адрес несколько разных аккаунтов не выйдет: сайты привязывают аккаунт к адресу и на второй попытке откажут — письма просто не будет. Поэтому адрес, на который код уже приходил, повторно под тот же сервис не выдаётся.

Деньги и сроки

Остаток

Остаток считается по сервису, а не общий. getPriceRests показывает, сколько адресов на этот сервис ещё не уходило. Общее число было бы завышенным: адрес, уже сходивший на ig, для ig больше не товар. Спросили один сервис — ответим про него; не спросили — отдадим весь список целиком (все сервисы, что у нас есть).

Незнакомый код сервиса не отвергаем — принимаем как есть. Список у вас пополняется без нашего участия.

Отказы

Pass serviceне указан сервис
Pass mail idне указан номер заказа
No activation found with such idтакого заказа у вас нет — проверьте номер
Code has not been received yet…письмо ещё не пришло, спросите позже
Activation is already canceledзаказ отменён или срок вышел
Bad actual activation statusсейчас так делать нельзя (например, отмена после письма)
No mails yetсвободных адресов под этот сервис нет
Insufficient balanceне хватает средств на счету
No such domainзапрошен домен, которого у нас нет
Bad api keyключ не признан

Второй набор слов — то же самое, короче

У сервиса две равноправные двери, и вы выбираете любую. Выше — путь /api/mail/…, привычный тем, кто уже работал с похожими сервисами. Ниже — короткий путь: всё в одном адресе, действие задаётся словом action. Механизм ОДИН и тот же, отличаются только названия. Смешивать в одном цикле не нужно — выберите что удобнее.

взять адрес/?api_key=КЛЮЧ&action=getMail&service=ig
→ {"status":"ok","id":123,"mail":"…@icloud.com","expires_in":1500,"price":0.003}
Номер заказа здесь называется id.
спросить код/?api_key=КЛЮЧ&action=getStatus&id=123
→ {"status":"waiting",…} пока письма нет, потом — код
Спрашивать раз в 3–5 секунд.
письмо целиком/?api_key=КЛЮЧ&action=getLetter&id=123
закрыть успешно/?api_key=КЛЮЧ&action=finish&id=123 → {"status":"done",…}
отменить/?api_key=КЛЮЧ&action=cancel&id=123 → {"status":"canceled",…}
остаток/?api_key=КЛЮЧ&action=balance → {"status":"ok","balance":5.03,"today":17099}

Номер заказа можно передавать как id, так и mailId — обе двери понимают оба названия, перепутать нельзя.

Если в ответ приходит пустота — ни текста, ни ошибки, а браузер пишет «не удаётся получить доступ к сайту» — это почти всегда ключ не передан или ошибка в адресе, а не сбой сервиса. Запросы без ключа мы намеренно оставляем без ответа. Проверить, что сервис жив: /?api_key=КЛЮЧ&action=balance — ответил, значит всё работает.

Полный пример

GET /api/mail/getActivation?api_key=КЛЮЧ&service=dr
    {"status":1,"mail":"09.ninths_least@icloud.com","mailId":7}

GET /api/mail/getCode?api_key=КЛЮЧ&mailId=7
    {"status":0,"error":"Code has not been received yet, please try again later"}

    … через несколько секунд …

GET /api/mail/getCode?api_key=КЛЮЧ&mailId=7
    {"status":1,"code":"577221"}

GET /api/mail/setStatus?api_key=КЛЮЧ&id=7&status=3
    {"status":1,"message":"Success"}

Пополнение счёта

Три способа, все ведут к одному и тому же счёту: USDT в сети BEP20 (BSC) переводится прямо на наш кошелёк, без посредников. Каждый счёт получает свою точную сумму с центами — по ней мы и узнаём ваш перевод. Зачисление автоматическое, обычно через минуту-две.

1 · Кнопка «Пополнить» на вашем сайте

Одна ссылка — человек нажимает и попадает на страницу оплаты с готовым адресом и суммой.

/?api_key=КЛЮЧ&action=pay_link&usd=100&net=bep20

Без usd откроется короткая страница выбора суммы и сети.

2 · Запросами, из своей программы

/?api_key=КЛЮЧ&action=pay_invoice&usd=100&net=bep20
addrадрес, куда отправлять
pay_amountсколько отправить — ровно, до цента (заказали 100 — например, 100.37)
usdсколько ляжет на ваш счёт — та же сумма, вместе с центами
txnномер счёта, по нему спрашивают состояние
expireдо какого времени счёт жив (30 минут)
qrкартинка кода — только если добавить &qr=1

Дальше проверяйте состояние, пока не увидите credited:

/?api_key=КЛЮЧ&action=pay_status&txn=НОМЕР
paid / expectedсколько пришло и сколько ждём
confirmations / confirmations_neededподтверждения сети
tx_urlссылка на перевод в блокчейне — проверяется без нас
creditedденьги уже на счету

Передумали — счёт можно закрыть:

/?api_key=КЛЮЧ&action=pay_cancel&txn=НОМЕР

3 · В кабинете, глазами

app.inboxotp.online/cab — вкладка «Пополнение». Там же вся история платежей со ссылками на переводы в блокчейне. Тот же список отдаёт запрос:

/?api_key=КЛЮЧ&action=pay_history

Про сумму и комиссию

Ограничения

inboxotp — API reference

Disposable mail addresses that receive verification codes. The call format is your own: nothing to rewrite on your side — just change the server address and the key.

Basehttps://api.inboxotp.online
MethodGET or POST, whichever suits you. Response is JSON in UTF-8
Keyapi_key, key or the X-Api-Key header — any of them works
Address domainicloud.com. There is one and it is not selectable
Liveness/ping — no key needed, answers {"status":"ok"}

How it works

  1. Your program asks for an address — getActivation.
  2. The user signs up on the target site with that address.
  3. The letter reaches us, we parse it and extract the code ourselves.
  4. You poll getCode until the code arrives.
  5. Got it — setStatus&status=3. Not needed — status=2, and you are not charged.
We parse the code for you. You get a ready code as a string — no need to parse letters. When a code is not enough (confirmation by link), there is a separate call for the whole letter.

Calls

All under /api/mail/…. Success is {"status":1,…}, failure is {"status":0,"error":"…"}.

getActivation?api_key=KEY&service=dr
take an address. → {"status":1,"mail":"…@icloud.com","mailId":123}
No charge at this point.
getCode?api_key=KEY&mailId=123
fetch the code. → {"status":1,"code":"505254"}
Poll every 3–5 seconds. This is where you are charged.
setStatus?api_key=KEY&id=123&status=3 — close as successful, the address is released immediately
…&status=2 — cancel
…&status=5 — waiting for one more code, the order stays open
getLetter?api_key=KEY&mailId=123
the whole letter — our addition on top of your spec, in the same format. &raw=1 adds the original source with service headers.
getPriceRests?api_key=KEY&service=dr
price and stock. → {"status":1,"data":{"dr":{"icloud.com":{"price":0.1,"count":5087}}}}
getMailServicesList/stubs/handler_api.php?api_key=KEY&action=getMailServicesList
the service list with names
getBalance/stubs/handler_api.php?api_key=KEY&action=getBalance
→ ACCESS_BALANCE:9.10
Order id or address — whichever you prefer. Everywhere we expect mailId or id we also accept the address itself: mail=name@icloud.com. You do not have to store our ids.

The whole letter

Useful when confirmation arrives as a link rather than a code, or when the details matter.

GET /api/mail/getLetter?api_key=KEY&mailId=123

{"status":1,
 "mail":"sequent_patron6h@icloud.com",
 "subject":"letter subject",
 "from":"noreply@verify.proton.me",
 "from_domain":"verify.proton.me",
 "received_at":"2026-09-03 04:47:04",
 "text":"full readable body of the letter",
 "code":"505254"}
from is the real sender, as a full address. Inside the letter it is hidden behind a forwarding mask such as "noreply@verify.proton.me" <noreply_at_verify_proton_me_zwmpd61@icloud.com> — we unwrap it and return what the sender itself would write: noreply@verify.proton.me. Next to it, from_domain holds the domain only — use that field if you match senders by domain.
The letter lives as long as the order does. Close the order or let the 25 minutes run out — the address goes back to the pool, the mailbox is wiped, and the letter is gone. If you need the text, take it before closing.

The same can be returned together with the code in one response: getCode&mailId=123&full=1 adds a letter field.

The loop

getActivation                       -> mailId
getCode  every 3-5 seconds          -> arrived?  setStatus status=3
                                       not yet?  wait, window is 25 minutes
There are no push notifications — poll the status yourself. Polling faster than every 3 seconds gains nothing: we look into the mailboxes every 5 seconds, the code cannot appear sooner.

A second code to the same address

Sites often send the code again — “didn’t arrive? resend”. To wait for that second letter without buying a new address, set status 5 instead of 3.

getCode                             -> first code received
setStatus id=123&status=5           -> waiting for one more
getCode  every 3-5 seconds          -> returns the FRESHEST code
setStatus id=123&status=3           -> got everything, close it
No extra charge. You pay for the activation, not for the letter: however many codes reach that address within the 25 minutes, you are charged once.
Window25 minutes per activation in total, any number of letters
What getCode returnsthe freshest code received. While no new letter has arrived — the previous code, unchanged
When to closestatus 3 once you have everything. If you don’t, the address frees itself when the window runs out
One address, one signup. Status 5 is for a second letter within ONE signup. Registering several different accounts on a single address will not work: sites bind the account to the address and refuse the second attempt — no letter is ever sent. That is why an address that has already received a code is never handed out again for the same service.

Money and timings

Stock

Stock is counted per service, not in total. getPriceRests shows how many addresses have never been used for that service. A total figure would be inflated: an address already used on ig is no longer stock for ig. Ask about one service and we answer about it; ask about none and we return the whole list — every service we carry.

Unknown service codes are not rejected — we accept them as they are. Your list grows without our involvement.

Errors

Pass serviceservice not specified
Pass mail idorder id not specified
No activation found with such idno such order of yours — check the id
Code has not been received yet…the letter has not arrived, ask again later
Activation is already canceledthe order was cancelled or expired
Bad actual activation statusnot allowed right now (e.g. cancelling after a letter)
No mails yetno free addresses for this service
Insufficient balancenot enough funds on the account
No such domaina domain we do not have was requested
Bad api keykey not recognised

A second vocabulary — the same thing, shorter

The service has two equal doors; pick either. Above is the /api/mail/… path, familiar to anyone who has used similar services. Below is the short path: everything in one address, with the step named by action. The mechanism is THE SAME — only the names differ. No need to mix them in one loop; use whichever suits you.

take an address/?api_key=KEY&action=getMail&service=ig
→ {"status":"ok","id":123,"mail":"…@icloud.com","expires_in":1500,"price":0.003}
The order number is called id here.
ask for the code/?api_key=KEY&action=getStatus&id=123
→ {"status":"waiting",…} while no letter yet, then the code
Poll every 3–5 seconds.
the whole letter/?api_key=KEY&action=getLetter&id=123
close as success/?api_key=KEY&action=finish&id=123 → {"status":"done",…}
cancel/?api_key=KEY&action=cancel&id=123 → {"status":"canceled",…}
stock/?api_key=KEY&action=balance → {"status":"ok","balance":5.03,"today":17099}

The order number may be passed as id or as mailId — both doors accept both names, so you cannot get it wrong.

If the reply is empty — no text, no error, and the browser says the site cannot be reached — that almost always means the key was not passed or the address has a typo, not that the service is down. Requests without a key are deliberately left unanswered. To check the service is alive: /?api_key=KEY&action=balance — if it answers, all is well.

Full example

GET /api/mail/getActivation?api_key=KEY&service=dr
    {"status":1,"mail":"09.ninths_least@icloud.com","mailId":7}

GET /api/mail/getCode?api_key=KEY&mailId=7
    {"status":0,"error":"Code has not been received yet, please try again later"}

    … a few seconds later …

GET /api/mail/getCode?api_key=KEY&mailId=7
    {"status":1,"code":"577221"}

GET /api/mail/setStatus?api_key=KEY&id=7&status=3
    {"status":1,"message":"Success"}

Topping up your balance

Three ways, all leading to the same invoice: USDT on the BEP20 (BSC) network goes straight to our wallet, no middlemen. Every invoice gets its own exact amount with cents — that is how we recognise your transfer. Crediting is automatic, usually within a minute or two.

1 · A "Top up" button on your site

One link — the person clicks and lands on the payment page with the address and amount ready.

/?api_key=KEY&action=pay_link&usd=100&net=bep20

Without usd a short amount-and-network picker opens instead.

2 · By request, from your own software

/?api_key=KEY&action=pay_invoice&usd=100&net=bep20
addraddress to send to
pay_amounthow much to send — exactly, to the cent (order 100 — e.g. 100.37)
usdwhat lands on your balance — the same amount, cents included
txninvoice number, used to ask for its state
expirehow long the invoice lives (30 minutes)
qrQR image — only if you add &qr=1

Then poll the state until you see credited:

/?api_key=KEY&action=pay_status&txn=NUMBER
paid / expectedhow much arrived and how much is expected
confirmations / confirmations_needednetwork confirmations
tx_urllink to the transfer on the blockchain — verifiable without us
creditedthe money is already on your balance

Changed your mind — the invoice can be closed:

/?api_key=KEY&action=pay_cancel&txn=NUMBER

3 · In the dashboard, by hand

app.inboxotp.online/cab — the "Top-up" tab. The full payment history with blockchain links lives there too. The same list is returned by:

/?api_key=KEY&action=pay_history

About the amount and the fee

Limits

inboxotp — 接口说明

一次性邮箱地址,直接返回验证码。调用格式沿用你原有的一套:你那边不用改任何代码, 只需换掉服务器地址和密钥。

地址https://api.inboxotp.online
方法GET 或 POST,随你方便。返回 UTF-8 编码的 JSON
密钥参数 api_key、参数 key 或请求头 X-Api-Key — 三种都接受
邮箱域名icloud.com,只有这一个,不可选择
连通性检查/ping — 无需密钥,返回 {"status":"ok"}

工作流程

  1. 你的程序申请一个地址 — getActivation。
  2. 用户用这个地址在目标网站注册。
  3. 邮件发到我们这里,由我们解析并取出验证码。
  4. 你轮询 getCode,直到验证码到达。
  5. 拿到了 — setStatus&status=3;用不上了 — status=2,不会扣费。
验证码由我们解析。 你拿到的直接是字符串形式的验证码,不必自己解析邮件。 如果只有验证码不够(有些确认是链接),另有一个取整封邮件的调用。

调用

全部位于 /api/mail/… 路径下,成功返回 {"status":1,…}, 失败返回 {"status":0,"error":"…"}。

getActivation?api_key=密钥&service=dr
取一个地址。 → {"status":1,"mail":"…@icloud.com","mailId":123}
此时尚未扣费。
getCode?api_key=密钥&mailId=123
取验证码。 → {"status":1,"code":"505254"}
每 3–5 秒轮询一次。扣费发生在这一步。
setStatus?api_key=密钥&id=123&status=3 — 成功关闭, 地址立即释放
…&status=2 — 取消
…&status=5 — 还要再收一条,订单保持打开
getLetter?api_key=密钥&mailId=123
整封邮件 — 这是我们在你原有规范之外的补充,格式一致。 加上 &raw=1 会附带含邮件头的原文。
getPriceRests?api_key=密钥&service=dr
价格与库存。 → {"status":1,"data":{"dr":{"icloud.com":{"price":0.1,"count":5087}}}}
getMailServicesList/stubs/handler_api.php?api_key=密钥&action=getMailServicesList
带名称的服务列表
getBalance/stubs/handler_api.php?api_key=密钥&action=getBalance
→ ACCESS_BALANCE:9.10
订单号或邮箱地址都行。 凡是需要 mailId 或 id 的地方,也可以直接传地址:mail=name@icloud.com。你不必在自己那边保存我们的订单号。

整封邮件

当确认是以链接而非验证码形式发来,或者你需要邮件细节时使用。

GET /api/mail/getLetter?api_key=密钥&mailId=123

{"status":1,
 "mail":"sequent_patron6h@icloud.com",
 "subject":"邮件主题",
 "from":"noreply@verify.proton.me",
 "from_domain":"verify.proton.me",
 "received_at":"2026-09-03 04:47:04",
 "text":"邮件的全部可读正文",
 "code":"505254"}
from 是真实发件人的完整地址。 在邮件本身里,它被转发掩码 挡住,形如 "noreply@verify.proton.me" <noreply_at_verify_proton_me_zwmpd61@icloud.com> — 我们会把它还原,交还发件人自己写的那个地址:noreply@verify.proton.me。旁边的 from_domain 只放域名 — 如果你是按域名核对发件人,就用这个字段。
邮件与订单同生共死。 关闭订单或过了 25 分钟,地址就回到库里、 邮箱被清空,邮件也随之消失。需要正文就在关闭之前取走。

同样的内容也可以和验证码一次返回: getCode&mailId=123&full=1 会增加 letter 字段。

循环

getActivation                       -> mailId
getCode  每 3-5 秒一次              -> 到了吗? setStatus status=3
                                       没有?   继续等,窗口 25 分钟
没有推送通知 — 请自行轮询。比 3 秒更频繁没有意义: 我们自己也是每 5 秒查一次邮箱,验证码不会来得更早。

同一地址的第二条验证码

网站常常会重发验证码:「没收到?再发一次」。想等这第二封而又不必另买地址, 把状态设为 5,而不是 3。

getCode                             -> 收到第一条验证码
setStatus id=123&status=5           -> 还要再收一条
getCode  每 3-5 秒一次              -> 返回最新的那条验证码
setStatus id=123&status=3           -> 都拿到了,关闭
不额外收费。 计费按一次激活,而不是按邮件:25 分钟内这个地址收到多少条 验证码,都只收一次钱。
窗口每次激活共 25 分钟,邮件数量不限
getCode 返回什么已收到的验证码中最新的一条。在新邮件到来之前, 返回的仍是先前那条
何时关闭拿到所需内容后用状态 3 关闭。不关也可以 — 窗口到期地址会自行释放
一个地址只对应一次注册。 状态 5 是为了同一次注册中的第二封邮件。 用一个地址注册多个不同账号是行不通的:网站会把账号绑定到地址上,第二次就会被拒 — 邮件根本不会发出。 因此已经收到过验证码的地址,不会再次用于同一服务。

费用与时限

库存

库存按服务计算,不是总数。 getPriceRests 显示的是还没有用于该服务的地址数量。总数会虚高:已经用过 ig 的地址, 对 ig 来说不再是货。查询某个服务就返回该服务的数字;不指定服务则返回整个列表 (我们拥有的全部服务)。

不认识的服务代码我们不会拒绝,照单接受。你那边的列表增加时无需知会我们。

错误

Pass service未指定服务
Pass mail id未指定订单号
No activation found with such id你名下没有这个订单 — 请检查订单号
Code has not been received yet…邮件尚未到达,请稍后再查
Activation is already canceled订单已取消或已过期
Bad actual activation status当前状态不允许该操作(例如邮件到达后再取消)
No mails yet该服务暂无可用地址
Insufficient balance账户余额不足
No such domain请求了我们没有的域名
Bad api key密钥未被识别

另一套写法 — 同样的功能,更简短

本服务有两扇同等的门,任选其一。上面是 /api/mail/… 那条路, 用过同类服务的人会很熟悉。下面是简短的一条:全部集中在同一个地址上, 动作由 action 指定。机制完全一样,只是名字不同。不需要在同一个循环里混用 — 挑顺手的那种即可。

取地址/?api_key=密钥&action=getMail&service=ig
→ {"status":"ok","id":123,"mail":"…@icloud.com","expires_in":1500,"price":0.003}
这里订单号叫 id。
查验证码/?api_key=密钥&action=getStatus&id=123
→ 邮件未到时是 {"status":"waiting",…},之后是验证码
每 3–5 秒查一次。
整封邮件/?api_key=密钥&action=getLetter&id=123
成功关闭/?api_key=密钥&action=finish&id=123 → {"status":"done",…}
取消/?api_key=密钥&action=cancel&id=123 → {"status":"canceled",…}
余额/?api_key=密钥&action=balance → {"status":"ok","balance":5.03,"today":17099}

订单号既可以写成 id,也可以写成 mailId — 两扇门都认这两个名字,不会弄混。

如果返回的是一片空白 — 既无文本也无错误,浏览器显示「无法访问此网站」 — 那几乎总是没有传密钥或者地址写错了,而不是服务故障。不带密钥的请求我们是有意不作应答的。 想确认服务是否正常:/?api_key=密钥&action=balance — 有回应就说明一切正常。

完整示例

GET /api/mail/getActivation?api_key=密钥&service=dr
    {"status":1,"mail":"09.ninths_least@icloud.com","mailId":7}

GET /api/mail/getCode?api_key=密钥&mailId=7
    {"status":0,"error":"Code has not been received yet, please try again later"}

    … 几秒钟后 …

GET /api/mail/getCode?api_key=密钥&mailId=7
    {"status":1,"code":"577221"}

GET /api/mail/setStatus?api_key=密钥&id=7&status=3
    {"status":1,"message":"Success"}

账户充值

三种方式,最终都指向同一张账单:BEP20(BSC)网络上的 USDT 直接转入我们的钱包, 没有中间方。每张账单都有自己精确到分的金额 — 我们靠它识别你的转账。到账是自动的,通常一两分钟。

1 · 放在你网站上的「充值」按钮

一条链接 — 用户点击后直接进入付款页,地址和金额都已备好。

/?api_key=密钥&action=pay_link&usd=100&net=bep20

不带 usd 时,会打开一个简短的金额与网络选择页。

2 · 用请求,从你自己的程序里

/?api_key=密钥&action=pay_invoice&usd=100&net=bep20
addr汇款地址
pay_amount应汇金额 — 精确到分(下单 100,例如 100.37)
usd将计入余额的金额 — 同一金额,含零头
txn账单号,用于查询状态
expire账单有效期(30 分钟)
qr二维码图片 — 仅在加上 &qr=1 时返回

随后轮询状态,直到看到 credited:

/?api_key=密钥&action=pay_status&txn=账单号
paid / expected已到账多少、期待多少
confirmations / confirmations_needed网络确认数
tx_url区块链上的转账链接 — 无需经过我们即可核实
credited款项已计入余额

改变主意时,账单可以关闭:

/?api_key=密钥&action=pay_cancel&txn=账单号

3 · 在后台页面里手动操作

app.inboxotp.online/cab — 「充值」标签页。完整的付款记录(含区块链链接)也在那里。 同一份列表也可以用请求取得:

/?api_key=密钥&action=pay_history

关于金额与手续费

限制