Files

6.9 KiB

Nodeloc API Examples — Full Reference with Real Response Data

Registration

curl -s 'https://domain.nodeloc.com/api/auth/register' -X POST \
  -H 'Content-Type: application/json' \
  -d '{"username":"[REDACTED-NAME]","email":"margaretedwardse316@gmail.com","password":"Reform123!@#"}'

Response:

{
  "message": "success.user_created",
  "user": {
    "id": 3375,
    "username": "[REDACTED-NAME]",
    "email": "margaretedwardse316@gmail.com",
    "email_verified": false,
    "is_admin": false,
    "user_level": "normal",
    "domain_quota": 2,
    "invite_code": "b578c9431037ff8a",
    "total_invites": 0,
    "successful_invites": 0,
    "status": "active",
    "created_at": "2026-07-16T10:39:49.944849748Z"
  }
}

Login

curl -s 'https://domain.nodeloc.com/api/auth/login' -X POST \
  -H 'Content-Type: application/json' \
  -d '{"email":"margaretedwardse316@gmail.com","password":"Reform123!@#"}'

Response:

{
  "message": "success.login",
  "token": "eyJhbG... (257 chars)",
  "user": {
    "id": 3375,
    "username": "[REDACTED-NAME]",
    "email": "margaretedwardse316@gmail.com",
    "email_verified": false,
    "is_admin": false,
    "user_level": "normal",
    "domain_quota": 2,
    "invite_code": "b578c9431037ff8a",
    "status": "active",
    "last_login_at": "2026-07-16T10:40:12.252949214Z"
  }
}

Root Domains (TLDs)

curl -s 'https://domain.nodeloc.com/api/public/root-domains'

Response:

{
  "root_domains": [
    {
      "id": 1,
      "domain": "loc.cc",
      "description": "Loc.cc",
      "nameservers": "[\"ns1.nodelook.com\",\"ns2.nodelook.com\"]",
      "use_default_nameservers": true,
      "is_active": true,
      "is_hot": true,
      "is_new": true,
      "priority": 100,
      "min_length": 3,
      "max_length": 63,
      "registration_count": 3436,
      "price_per_year": 100,
      "lifetime_price": 1000,
      "is_free": false,
      "min_user_level": "normal"
    },
    {
      "id": 5,
      "domain": "rr.kg",
      "price_per_year": 100,
      "lifetime_price": 1000,
      "is_free": false,
      "min_user_level": "normal"
    }
  ]
}

Calculate Price

curl -s 'https://domain.nodeloc.com/api/orders/calculate' -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"subdomain":"[REDACTED-NAME]","root_domain_id":1,"years":10}'

Response:

{
  "base_price": 1000,
  "discount_amount": 0,
  "final_price": 1000,
  "coupon_applied": false
}

Create Order (with FREEJUL promo)

curl -s 'https://domain.nodeloc.com/api/orders' -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"subdomain":"[REDACTED-NAME]","root_domain_id":1,"years":10,"coupon_code":"FREEJUL"}'

Response:

{
  "message": "Order created successfully",
  "order": {
    "id": 6702,
    "order_number": "ORD178419901522d1fad9",
    "full_domain": "[REDACTED-NAME].loc.cc",
    "years": 10,
    "is_lifetime": false,
    "base_price": 1000,
    "discount_amount": 1000,
    "final_price": 0,
    "status": "pending",
    "created_at": "2026-07-16T10:50:15.863928Z",
    "expires_at": "2026-07-16T11:05:15.863821Z",
    "root_domain": {
      "id": 1,
      "domain": "loc.cc"
    }
  }
}

Pay Free Order

curl -s "https://domain.nodeloc.com/api/payments/6707/complete-free" -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

Response:

{
  "message": "Free order completed successfully",
  "order_id": 6707
}

Paid Order Initiate

curl -s "https://domain.nodeloc.com/api/payments/${ORDER_ID}/initiate" -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'
# → {"redirect_url":"https://..."}

List Domains

curl -s 'https://domain.nodeloc.com/api/domains' -H "Authorization: Bearer $TOKEN"

Response:

{
  "domains": [
    {
      "id": 4901,
      "full_domain": "[REDACTED-NAME].loc.cc",
      "subdomain": "[REDACTED-NAME]",
      "root_domain_id": 1,
      "status": "active",
      "registered_at": "2026-07-16T10:52:26.925642Z",
      "expires_at": "2036-07-16T10:52:26.925642Z",
      "nameservers": "[\"ns1.nodelook.com\",\"ns2.nodelook.com\"]",
      "use_default_nameservers": true,
      "auto_renew": false,
      "dns_synced": false,
      "user_id": 3375
    }
  ]
}

List Orders

curl -s 'https://domain.nodeloc.com/api/orders' -H "Authorization: Bearer $TOKEN"

Response:

{
  "orders": [
    {
      "id": 6707,
      "order_number": "ORD1784199104dba87308",
      "full_domain": "[REDACTED-NAME].loc.cc",
      "years": 10,
      "is_lifetime": false,
      "base_price": 1000,
      "discount_amount": 1000,
      "final_price": 0,
      "status": "paid",
      "created_at": "2026-07-16T10:51:44.026417Z",
      "paid_at": "2026-07-16T10:52:26.925642Z"
    }
  ],
  "page": 1,
  "page_size": 20,
  "total": 1
}

DNS — List Records

curl -s "https://domain.nodeloc.com/api/dns/4901/records" \
  -H "Authorization: Bearer $TOKEN"

Response:

{
  "records": [
    {
      "id": 6793,
      "domain_id": 4901,
      "name": "@",
      "type": "MX",
      "content": "mx1.improvmx.com",
      "ttl": 3600,
      "priority": 10,
      "is_active": true,
      "synced_to_powerdns": false
    }
  ]
}

DNS — Add Record

Supported types: A, AAAA, CNAME, ALIAS, MX, TXT, NS, SRV, CAA. MX records require priority field (integer).

curl -s 'https://domain.nodeloc.com/api/dns/4901/records' -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"name":"@","type":"MX","content":"mx1.improvmx.com","priority":10,"ttl":3600}'

Response:

{
  "message": "DNS record created successfully",
  "record": {
    "id": 6793,
    "domain_id": 4901,
    "name": "@",
    "type": "MX",
    "content": "mx1.improvmx.com",
    "ttl": 3600,
    "priority": 10,
    "is_active": true,
    "synced_to_powerdns": false,
    "created_at": "2026-07-16T12:20:35.043233174Z"
  }
}

Error Responses

Email already exists

{"error": "error.email_exists"}

Validation error (wrong field names, missing required fields)

{"error": "error.validation"}

Coupon already used (one per account)

{"error": "You have already used this coupon on 0001-01-01T00:00:00Z. This coupon can only be used once per user"}

Domain already registered

{"error": "Domain already registered"}

Invalid credentials

{"error": "error.invalid_credentials"}

CyberPanel provisioning failed

{"error": "CyberPanel provisioning failed: CyberPanel returned HTTP 404..."}

Password registration disabled (web UI only)

The web UI shows "当前禁止密码注册,请使用以下登录方式" but the API still accepts password registration.