Өдрийн зарцуулалтын хязгаар
Домэйн эсвэл Төлбөр бичих эрхтэй түлхүүрт заавал. Зөвхөн хэтэвчээс төлнө. Хязгаар хэтэрвэл 402 алдаа буцна.
Домэйн хайх, бүртгэх, DNS удирдах, нэхэмжлэх төлөх, өөрчлөлтийг webhook-оор авах. Апп дээр хийдэг бүхнээ кодоор.
Үндсэн хаягhttps://api.ns.mn/v1
Test түлхүүрээр бодит өгөгдөл дээр төлбөргүй туршаад, бэлэн болмогц Live руу шилжинэ.
Багийн Тохиргоо, Хөгжүүлэгч хэсэгт түлхүүр үүсгэж, эрхийг нь сонгоно. Нууц утгыг нэг л удаа харуулна.
ns_test_ түлхүүр бодит өгөгдлийг уншина. Бичих хүсэлтийг шалгаж, үнэлдэг ч хадгалахгүй, төлбөр авахгүй.
ns_live_ түлхүүр үүсгэж, худалдан авах бол өдрийн зарцуулалтын хязгаараа тохируулна.
# shop.mn чөлөөтэй эсэхийг шалгах curl "https://api.ns.mn/v1/register/search?q=shop.mn" \ -H "Authorization: Bearer ns_test_••••7Q2M" \ -H "Accept-Language: mn"
{
"status": 200,
"data": {
"exact": {
"name": "shop.mn",
"status": "available",
"statusLabel": "Чөлөөтэй",
"price": { "years": 1, "amount": 89000, "amountLabel": "89,000₮" }
},
"others": [ ... ]
}
}Түлхүүр бүр нэг багт харьяалагдаж, зөвхөн https://api.ns.mn/v1 дээр ажиллана. Аппын нэвтрэлт энд ажиллахгүй.
Хэсэг бүрт Хаалттай, Унших, Бичих гэсэн түвшний аль нэгийг сонгоно. Хэрэгтэй эрхийг л өгнө үү.
| Хэсэг | Түвшин | Бичих эрхээр |
|---|---|---|
| Домэйн | ХаалттайУншихБичих | Бүртгэх, сунгах, тохиргоо өөрчлөх |
| DNS | ХаалттайУншихБичих | Бичлэг, nameserver өөрчлөх |
| Шилжүүлэг | ХаалттайУншихБичих | Auth код, оруулах, гаргах |
| Төлбөр | ХаалттайУншихБичих | Нэхэмжлэх төлөх |
| Баг | ХаалттайУнших | Зөвхөн унших боломжтой |
Гишүүн түлхүүрт өөрийн эрхээс илүү эрх өгөх боломжгүй. Унших эрхтэй шилжүүлэг Auth кодыг харуулдгийг анхаарна уу.
Түлхүүр алдагдсан ч хохирол хязгаартай байхаар тохируулсан.
Домэйн эсвэл Төлбөр бичих эрхтэй түлхүүрт заавал. Зөвхөн хэтэвчээс төлнө. Хязгаар хэтэрвэл 402 алдаа буцна.
Түлхүүр бүрээр тоолно. Хэтэрвэл 429 алдаа, details.retryAfter-д хэдэн секунд хүлээхийг заана.
Түлхүүр бүрийн сарын хүсэлт, алдааны тоо харагдана. Түлхүүрийн хийсэн өөрчлөлт түүний нэрээр үйл ажиллагааны бүртгэлд үлдэнэ.
Хариу бүр JSON бөгөөд status талбартай. Алдааны мессежийг хэрэглэгчдээ шууд харуулж болно.
# Өдрийн хязгаар хэтэрсэн худалдан авалт { "status": 402, "error": "Өдрийн зардлын хязгаар хэтэрнэ. Хязгаар 500,000₮, өнөөдөр 480,000₮ зарцуулсан", "details": { "code": "spend_cap", "cap": 500000, "spentToday": 480000, "required": 89000, "left": 20000 } }
Апп дээрх бүх үйлдэл ижил замаар /v1 дор байна. Доорх нь хамгийн их хэрэглэгддэг нь.
/tldsӨргөтгөлүүд, үнийн хамт/register/search?q=shop.mnНэр чөлөөтэй эсэх, үнэ, хувилбарууд/register/bulk100 хүртэл нэрийг нэг дор шалгах/cart/itemsДомэйн сагсанд нэмэх/cart/checkoutСагсыг хэтэвчээс төлж бүртгэх/domainsБагийн домэйнүүд, хуудаслалттай/domains/:domainНэг домэйны мэдээлэл, төлөв/domains/:domain/auto-renewАвто сунгалт асаах, унтраах/domains/:domain/lockRegistrar lock асаах, унтраах/domains/:domain/auth-codeШилжүүлэх Auth код авах/dns/:domain/recordsDNS бичлэгүүд/dns/:domain/recordsБичлэг нэмэх/dns/:domain/records/:idБичлэг засах/dns/:domain/records/:idБичлэг устгах/dns/:domain/nameserversNameserver солих (шалгасны дараа)/transfers/in/checkДомэйн, Auth кодыг шалгах/transfers/inШилжүүлж оруулах/transfers/outГаргах хүсэлтүүд/transfers/:id/approveГаргах хүсэлт зөвшөөрөх/billing/invoicesНэхэмжлэхүүд, төлөвөөр/billing/invoices/:id/payНэхэмжлэх төлөх/billing/renewalsДомэйн сунгах/billing/walletХэтэвчийн үлдэгдэлДомэйн, төлбөр, шилжүүлэг, DNS-д өөрчлөлт гарахад таны https endpoint руу POST илгээнэ. Багт 10 хүртэл endpoint.
NS-Event: domain.expiring NS-Delivery: 7b1c... NS-Signature: t=1762840800,v1=5f2c... { "id": "evt_4f9a2c1e7b3d8a6f0e5c9b21", "type": "domain.expiring", "createdAt": "2026-11-07T02:00:00.000Z", "teamId": "3f6c2a1e-...", "data": { "domain": { "name": "shop.mn" }, "expiresAt": "2026-11-21T00:00:00.000Z", "daysLeft": 14, "autoRenew": true } }
import crypto from 'node:crypto' // header: NS-Signature, rawBody: задлаагүй body function verify(header, rawBody, secret) { const parts = header.split(',').map((p) => p.split('=')) const { t, v1 } = Object.fromEntries(parts) if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false const expected = crypto.createHmac('sha256', secret) .update(`${t}.${rawBody}`).digest('hex') return v1?.length === expected.length && crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected)) }
| Үйл явдал | Хэзээ |
|---|---|
domain.registered | Домэйн бүртгэгдсэн |
domain.renewed | Домэйн сунгагдсан |
domain.expiring | Дуусахад 30, 14, 7, 1, 0 хоног үлдсэн |
domain.expired | Домэйны хугацаа дууссан |
domain.autorenew_failed | Авто сунгалт амжилтгүй болсон |
invoice.paid | Нэхэмжлэх төлөгдсөн |
transfer.requested | Домэйн гаргах хүсэлт ирсэн |
transfer.completed | Шилжүүлэг дууссан |
transfer.failed | Шилжүүлэг амжилтгүй болсон |
dns.changed | DNS өөрчлөгдсөн |
Төлбөрийн үйл явдлыг зөвхөн төлбөр харах эрхтэй гишүүн захиална. Test түлхүүрийн хүсэлт webhook илгээхгүй.
Test түлхүүр төлбөргүй. Эрх, хязгаараа өөрөө тохируулна.