# NodeLoc (domain.nodeloc.com) Reference ## Provider Details - **Service**: Free subdomains by NodeLoc community - **URL**: https://domain.nodeloc.com - **Root domains**: loc.cc, and others - **Nameservers**: ns1.nodelook.com, ns2.nodelook.com (IP: [REDACTED-IP]) - **DNS backend**: PowerDNS (has "Sync from PowerDNS" button) - **Health checks**: Automatic — domain gets suspended if health check fails for extended period ## API Endpoints | Method | Endpoint | Auth | Purpose | |--------|----------|------|---------| | POST | `/api/auth/login` | None | Login, returns JWT token | | GET | `/api/domains` | Bearer | List user's domains | | GET | `/api/domains` + query | Bearer | Domain details | DNS record management has NO REST API. Must use browser UI. ## Login Response Shape ```json { "message": "success.login", "token": "[REDACTED-JWT]...", "user": { "id": 3375, "username": "[REDACTED-NAME]", "email": "user@example.com", "email_verified": false, "is_admin": false, "user_level": "normal", "domain_quota": 2, "invite_code": "...", "total_invites": 0, "successful_invites": 0, "status": "active", "created_at": "2026-07-16T10:39:49.944849Z", "last_login_at": "..." } } ``` JWT is HS256. Payload: `{"user_id":...,"username":"...","email":"...","is_admin":false,"exp":...,"iat":...}` ## Domain Response Shape ```json { "domains": [{ "id": 4901, "full_domain": "[REDACTED-NAME].loc.cc", "root_domain": {"id": 1, "domain": "loc.cc", ...}, "nameservers": "[\"ns1.nodelook.com\",\"ns2.nodelook.com\"]", "registered_at": "2026-07-16T10:52:26.925642Z", "expires_at": "2036-07-16T10:52:26.925642Z", "dns_synced": false, "auto_renew": false, "first_failed_at": "2026-07-16T16:03:45.845029Z" }] } ``` ## DNS Record States | Status | Chinese | Meaning | |--------|---------|---------| | `已同步` | Synced | Record active and propagated | | `待处理` | Pending | Record submitted but not yet synced to PowerDNS | ## Domain Statuses | Status | Meaning | |--------|---------| | `suspended` | Health check failed repeatedly. Domain will be auto-deleted in ~19 days if not fixed. | | `active` | Normal operation | ## Health Check Behavior - Runs periodically against the domain - Checks if the domain resolves AND responds - After repeated failures: domain gets suspended - After suspension: ~19 days until auto-deletion - Adding a valid A record + making the server respond fixes the health check ## Browser UI Navigation 1. Login → Dashboard (`/`) 2. "我的域名" → Domain list 3. Click domain → Domain detail (status, health, DNS button) 4. "DNS" button → DNS management page with record table 5. "添加 DNS 记录" → Add record dialog ## DNS Record Form - Name: `@` (root) or subdomain name - Type: A, AAAA, CNAME, ALIAS, MX, TXT, NS, SRV, CAA - Value: IP or hostname - TTL: seconds (default 3600) - Button: "创建" (Create) — may require JS click workaround ## Expiration Domains are free and expire in 20 years (2036 for domains registered in 2026). Auto-renewal is off by default.