https://api.wlrus.cfd · версия v1https://api.wlrus.cfdДоступ к API открывается автоматически после того, как суммарные пополнения баланса (за всё время, только оплаченные счета) достигнут 10 $. Ключ выпускается самостоятельно в боте:
Ключ передаётся одним из двух заголовков:
Authorization: Bearer <ВАШ_КЛЮЧ>
X-Api-Key: <ВАШ_КЛЮЧ>
Без ключа возвращается 401 unauthorized. Если ключ действителен, но суммарных
пополнений меньше 10 $ — 403 access_required.
curl -s https://api.wlrus.cfd/v1/me \
-H "Authorization: Bearer $WLRUS_API_KEY"
# проверка свободен ли домен и цена
curl -s "https://api.wlrus.cfd/v1/check?domain=example.com&years=1" \
-H "Authorization: Bearer $WLRUS_API_KEY"
const API = "https://api.wlrus.cfd";
const KEY = process.env.WLRUS_API_KEY;
const r = await fetch(`${API}/v1/domains`, {
headers: { Authorization: `Bearer ${KEY}` },
});
const data = await r.json();
console.log(data.domains);
import requests
API = "https://api.wlrus.cfd"
KEY = "ваш_ключ"
s = requests.Session()
s.headers["Authorization"] = f"Bearer {KEY}"
print(s.get(f"{API}/v1/me").json())
print(s.get(f"{API}/v1/check", params={"domain": "example.com", "years": 1}).json())
{ "ok": true }
{
"id": 123456789,
"username": "user",
"full_name": "Иван И.",
"balance_usd": 25.40,
"created_at": "2026-01-04 12:00:00",
"topup_total_usd": 62.00,
"api_access": true,
"discount_percent": 10
}
{
"domains": [
{
"id": 12, "domain": "example.com", "tld": "com", "status": "active",
"years": 1, "registered_at": "2026-03-11 09:20:00", "expiry": "2027-03-11",
"auto_renew": false, "nameservers": ["crystal.ns.cloudflare.com"],
"owed": 0.0
}
]
}
{ "records": [ { "id": "…", "type": "A", "host": "@", "value": "1.2.3.4",
"ttl": 3600, "proxied": false } ] }
{
"type": "A", // обязательно
"host": "@", // поддомен, по умолчанию "@"
"value": "1.2.3.4", // обязательно
"ttl": 3600, // необязательно
"proxied": false, // оранжевое облако Cloudflare
"priority": 10 // для MX/SRV
}
Ответ: 201 и { "record": { … } }.
host, value, ttl, proxied, priority).{ "ok": true }
{ "domain": "example.com", "available": true, "years": 1,
"price_total_usd": 14.03, "premium": false }
Если домен занят: { "domain": "…", "available": false }.
.io/.tv уходят на ручное согласование администратором.{
"domain": "example.com",
"years": 1,
"use_cloudflare": false // true — сразу подключить домен к Cloudflare
}
Ответы:
| status | HTTP | Значение |
|---|---|---|
registered | 201 | Домен зарегистрирован, баланс списан |
pending_approval | 202 | Заявка отправлена админу, ждёт решения |
held | 202 | Цена регистратора не подтверждена / нужна ручная проверка |
{ "years": 1 }
// → { "status": "renewed", "domain": "example.com", "years": 1,
// "charged_usd": 12.51, "premium": false }
{ "invoices": [ { "created_at": "2026-04-02 10:11:12", "method": "lava",
"amount_usd": 20.0, "status": "paid", "paid_at": "2026-04-02 10:12:03" } ] }
/v1/check,
/v1/domains/register; на продление она не действует.discount_percent метода /v1/me.429 rate_limited.429 busy.Все ошибки имеют единый формат:
{ "error": { "code": "insufficient_funds", "message": "Недостаточно средств: нужно 14.03, на балансе 5.0" } }
| HTTP | code | Когда возникает |
|---|---|---|
| 400 | bad_request | Некорректные параметры или тело запроса |
| 401 | unauthorized | Ключ не указан, недействителен или отозван |
| 402 | insufficient_funds | На балансе недостаточно средств |
| 403 | access_required | Меньше 10 $ суммарных пополнений |
| 403 | approval_rejected | Регистрация отклонена администрацией |
| 404 | not_found | Домен/запись не найдены или не вам принадлежат |
| 409 | unavailable | Домен занят |
| 409 | cf_required | Нужен подключённый Cloudflare-токен для этой зоны |
| 409 | cf_not_configured | Cloudflare-токен не подключён — DNS недоступен |
| 429 | rate_limited / busy | Превышен лимит запросов / операция уже идёт |
| 500 | internal_error | Внутренняя ошибка сервиса |
| 502 | upstream_error / registrar_error | Ошибка регистратора или Cloudflare |
| 503 | tld_disabled / registrar_unavailable | Зона закрыта / регистратор недоступен |