Skip to main content
Base URL: https://scamprojecttest.xyz/api/v1. Shared rules (auth, limits, errors, idempotency) are in the overview.

Account

MethodPathScopeDescription
GET/users/medomains:readKey & user profile
GET/users/{user_id}/balancedomains:readBalance
GET/transactionsdomains:readTransactions (paginated, ?user_id=)
GET/referralsdomains:readReferral stats
curl https://scamprojecttest.xyz/api/v1/users/me -H "Authorization: Bearer $KEY"
{
  "principal": { "key_id": 3, "name": "reseller acme", "role": "reseller", "scopes": ["domains:read","domains:buy"], "user_id": 42 },
  "user": { "id": 42, "telegram_id": 666971555, "balance_usd": "12.50", "is_banned": false }
}

Domains

List domains

GET /domains · scope domains:read · paginated · ?user_id= (operator)

Domain card

GET /domains/{domain_id} · scope domains:read. A reseller only sees its own; a foreign id → 404.

Availability check

GET /domains/check?names=a.com,b.net · scope domains:read · up to 50 names
{ "results": [ { "domain": "a.com", "available": false, "price_usd": "17.00", "error": null } ] }

TLD price

GET /domains/price?tld=com · scope domains:read
{ "tld": "com", "price_usd": "17.00", "supported": true }

Bulk check

POST /domains/check:bulk · scope domains:read · body { "names": ["a.com","b.net"] } → bulk envelope.

Buying (money)

Money endpoints require API_MONEY_ENABLED, scope domains:buy, an Idempotency-Key header, and (if enabled) an X-Signature.

Bulk registration

POST /domains/register:bulk · scope domains:buy · money · async → 202
curl -X POST "https://scamprojecttest.xyz/api/v1/domains/register:bulk" \
  -H "Authorization: Bearer $KEY" \
  -H "Idempotency-Key: reg-2026-06-09-001" \
  -H "Content-Type: application/json" \
  -d '{"names":["example-store-1.com","example-store-2.net"]}'
{ "batch_id": "checkout:1234", "accepted": 2, "status": "pending" }
Operator must name the buyer: ?user_id=42. Registration runs in the background; poll GET /batches/checkout:1234. Invalid rows → 422 with per-row detail; nothing is charged. Premium (registry-priced) names are unavailable and never enter registration.

Order status

POST /orders/status:bulk · scope domains:read · body { "ids": [101,102] }.

Batch status

GET /batches/{batch_id} · scope domains:read.

Deposits (money)

Create invoice

POST /deposits · scope deposits:write · money201
FieldTypeDescription
amount_usdstring/number > 0Amount to credit (1–1000)
providerstringcryptobot · xrocket · lava · p2328 · lolzteam
assetstring(optional) coin for CryptoBot
user_idnumberRequired for an operator key
{ "provider":"cryptobot","external_id":"inv_123","pay_url":"https://...","amount_usd":"5","pay_usd":"5.15" }
The balance is credited after payment — via the provider’s signed webhook, not this request.

Invoice status

GET /deposits/{provider}/{external_id} · scope domains:read.

Operator endpoints

Operator key only (scope admin:*). Money ones require Idempotency-Key.
MethodPathDescription
POST/admin/users/{user_id}/balanceAdjust balance {delta_usd, reason} (money)
POST/admin/users/{user_id}/banBan/unban {banned, reason}
POST/admin/deposits/{transaction_id}/mark-completedManually complete a deposit (money)
POST/admin/deposits/{transaction_id}/mark-failedMark a deposit failed