API Documentation

Complete reference for DNS Subdomain API endpoints

Overview

Base URL

https://hhh.wtf/v1/api

Authentication

All authenticated endpoints require an API key in the Authorization header:

Authorization: Bearer YOUR_API_KEY

Authentication

All API requests require authentication using an API key (for protected endpoints). Include your API key in the request header.

Request Header
Authorization: Bearer YOUR_API_KEY

Keep your API keys secure. Never commit them to version control or expose them in client-side code.

API Endpoints

POST /domain/search
Try on Swagger

Search Domain Availability

Check if a specific subdomain is available.

Request Body

JSON
{
  "name": "myapp",
  "domain": "xy.zz"
}

Example cURL

cURL
curl -X POST https://hhh.wtf/v1/api/domain/search \
  -H "Content-Type: application/json" \
  -d '{
    "name": "myapp",
    "domain": "xy.zz"
  }'

Responses

Success (200) - Available

{
  "ok": true,
  "message": "subdomain available",
  "domain": "myapp.xy.zz"
}

Not Available (404)

{
  "ok": false,
  "message": "subdomain not available",
  "domain": "myapp.xy.zz"
}
POST /domain/search/bulk
Try on Swagger

Search Domain Bulk

Check subdomain availability across all active main domains.

Request Body

{
  "name": "myapp"
}

Success (200)

{
  "ok": true,
  "name": "myapp",
  "results": [
    {
      "fullDomain": "myapp.xy.zz",
      "domain": "xy.zz",
      "status": "available"
    },
    {
      "fullDomain": "myapp.yy.zz",
      "domain": "yy.zz",
      "status": "not-available"
    },
    {
      "fullDomain": "myapp.aa.bb",
      "domain": "aa.bb",
      "status": "not-allowed"
    }
  ]
}
POST /domain/buy
Try on Swagger

Buy Domain

Purchase a subdomain with a specific plan.

Headers

Authorization: Bearer YOUR_API_KEY

Request Body

{
  "name": "myapp",
  "domain": "xy.zz",
  "plan": "YEARLY"
}

Success (200)

{
  "ok": true,
  "message": "Subdomain purchased successfully",
  "data": {
    "subdomainId": "cm5x8y9z...",
    "name": "myapp",
    "domain": "xy.zz",
    "plan": "YEARLY",
    "expiresAt": "2026-01-15T10:30:00.000Z",
    "orderId": "cm5x8y9z...",
    "walletBalance": "97.00"
  }
}

Insufficient Balance (402)

{
  "ok": false,
  "message": "Insufficient balance",
  "errors": ["Insufficient balance"],
  "noBalance": "No Balance",
  "required": "3",
  "balance": "1.50"
}
POST /domain/delete/:id
Try on Swagger

Delete Domain

Permanently delete a subdomain.

Headers

Authorization: Bearer YOUR_API_KEY

URL Parameter

id * - Subdomain ID

Success (200)

{
  "ok": true,
  "message": "Domain deleted successfully",
  "data": {
    "id": "cm5x8y9z...",
    "name": "myapp",
    "domain": "xy.zz"
  }
}

Not Found (404)

{
  "ok": false,
  "message": "Domain not found",
  "errors": ["Domain not found"]
}
POST /domain/dns/:id
Try on Swagger

Update DNS Records

Update DNS records for a subdomain.

Headers

Authorization: Bearer YOUR_API_KEY

Request Body

{
  "records": [
    {
      "type": "A",
      "name": "@",
      "value": "192.168.1.1",
      "ttl": 3600
    },
    {
      "type": "CNAME",
      "name": "www",
      "value": "example.com",
      "ttl": 3600
    }
  ],
  "autoPay": true
}

Success (200)

{
  "ok": true,
  "message": "DNS updated successfully",
  "data": {
    "subdomainId": "cm5x8y9z...",
    "autoPay": true,
    "records": [
      {
        "type": "A",
        "name": "@",
        "value": "192.168.1.1",
        "ttl": 3600
      }
    ]
  }
}
POST /domain/toggle/:id
Try on Swagger

Toggle Domain Status

Activate or deactivate a subdomain (YEARLY plan only).

Headers

Authorization: Bearer YOUR_API_KEY

Behavior

  • If domain is ACTIVE: Deactivates it and removes DNS records
  • If domain is INACTIVE/EXPIRED: Reactivates it (charges $3 for 1 year renewal) and restores DNS
  • Only works for YEARLY plan subdomains

Responses

Success - Activated (200)

{
  "ok": true,
  "message": "Sub-Domain Activated Successfully",
  "data": {
    "title": "Domain Activated",
    "message": "Sub-Domain Activated Successfully"
  }
}

Success - Deactivated (200)

{
  "ok": true,
  "message": "Sub-Domain Deactivated Successfully",
  "data": {
    "title": "Domain Deactivated",
    "message": "Sub-Domain Deactivated Successfully"
  }
}