🚀 Quickstart
New here? Create an account + get an API key in one call
with a registration token. Already have an account? Jump straight to registering domains.
$ curl -s -X POST
'https://ing.ng/api/auth/register' \
-H
'Content-Type: application/json' \
-d
'{
"email": "[email protected]",
"password": "your-password",
"registration_token": "ing_reg_xxx..."
}'
$ curl -s
'https://ing.ng/api/check-domain?name=my-agent'
{
"domain":
"my-agent.ing.ng",
"available":
true
}
$ curl -s -X POST
'https://ing.ng/api/register-domain' \
-H
'Authorization: Bearer ing_xxx...' \
-H
'Content-Type: application/json' \
-d
'{"name":"my-agent","agent":"Claude Code"}'
💡 Agent tip: Include the /api/check-domain call in your agent's
system prompt so it can validate names before requesting one.
📦 Build on ing.ng — SDKs
Claim and manage a full identity — a name, a wallet, and a profile — in a
few lines. Official zero-dependency clients for Python and
JavaScript.
Python
from ingng import Ingng
ing = Ingng("ing_your_api_key")
ing.claim("alice")
ing.set_wallet("alice", eth="0x…", btc="bc1…")
ing.set_profile("alice", display="Alice", twitter="alice")
JavaScript (Node 18+, Deno, browser)
import { Ingng } from "ingng";
const ing = new Ingng("ing_your_api_key");
await ing.claim("alice");
await ing.setWallet("alice", { eth: "0x…", btc: "bc1…" });
await ing.setProfile("alice", { display: "Alice", twitter: "alice" });
Both wrap the same API — including the identity endpoints
/api/domains/<name>/wallets and /api/domains/<name>/profile.
Names resolve in the browser and in ENS-aware wallets (MetaMask, Rainbow, Rabby).
🤖 Prefer native tools? The
MCP server exposes these as first-class tools for
any MCP-compatible agent — or wrap the SDK methods as LangChain tools directly. SDK source +
README live in
sdk/ in the repo.
🔍 Check Availability
GET
/api/check-domain
Check if a subdomain name is available for registration.
Query Parameters
| Parameter | Type | Description |
| name | string | The subdomain name to check (e.g., my-project) |
| ext | string | Optional. Extension (default: .ing.ng) |
Response
{
"available": true
"domain": "my-project.ing.ng",
"name": "my-project",
"extension": ".ing.ng"
}
📝 Register a Domain
POST
/api/register-domain
Register a *.ing.ng subdomain programmatically.
Requires a valid API key in the Authorization: Bearer <key> header.
Request Headers
| Header | Value | Required |
| Authorization | Bearer ing_<your-api-key> | ✅ |
| Content-Type | application/json | ✅ |
Request Body
| Field | Type | Description |
| name | string | The subdomain name (e.g., my-agent) |
| extension | string | Optional. Default: .ing.ng |
| ns1, ns2 | string | Optional. Custom nameservers |
| agent | string | Optional. Agent identifier for logging |
Example
$ curl -s -X POST
'https://ing.ng/api/register-domain' \
-H
'Authorization: Bearer ing_abc123...' \
-H
'Content-Type: application/json' \
-d
'{
"name": "my-agent",
"agent": "claude-code"
}'
{
"status":
"success",
"domain":
"my-agent.ing.ng",
"name":
"my-agent",
"owner":
"[email protected]",
"expires_at":
"2036-06-06T09:13:00",
"dns_servers": [
"ns1.cloudflare.com",
"ns2.cloudflare.com"]
}
Limits
- Max 10 subdomains per account
- 10 registrations per hour per IP (rate limited)
- Abusive names (crypto scams, phishing keywords) are automatically blocked
- Valid names: 1-63 chars, letters/digits/hyphens, no leading/trailing hyphen
🔑 API Key Authentication
Register via the panel to generate API keys. Keys are prefixed with ing_
for easy identification and are hashed at rest.
Where to get your key
- Create an account at ing.ng
- Go to Panel → Agent API Keys
- Click Generate Key, give it a name (e.g., "My GitHub Bot")
- Copy the key immediately — it's shown once
⚠️ Security: Treat API keys like passwords. If compromised, revoke them
from the panel and generate a new one.
Usage
export INGNG_API_KEY="ing_abc123..."
$ curl -s -X POST 'https://ing.ng/api/register-domain' \
-H 'Authorization: Bearer $INGNG_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"name":"my-bot"}'
🤖 Agent Account Creation
Create an account and get an API key — all in one API call.
No CAPTCHA required when using a registration token,
making this the fastest onboarding path for autonomous agents.
⚡ One-shot setup: Your agent calls this endpoint once,
receives a user ID and API key in the response, and can immediately
start registering domains. No panel, no email verification needed.
Register + Get API Key
POST
/api/auth/register
Requires a valid registration token. Contact the ing.ng team
to obtain one for your agent integration.
| Field | Type | Required | Description |
| email | string | ✅ | Agent owner's email |
| password | string | ✅ | Account password (min 8 chars) |
| registration_token | string | ✅ | Pre-shared token for CAPTCHA bypass |
$ curl -s -X POST
'https://ing.ng/api/auth/register' \
-H
'Content-Type: application/json' \
-d
'{
"email": "[email protected]",
"password": "secure-pass-123",
"registration_token": "ing_reg_xxx..."
}'
{
"user_id":
"uuid-here",
"api_key":
"ing_xxx...",
"email":
"[email protected]"
}
Create Additional API Keys
POST
/api/api-keys
Once authenticated, create additional API keys for different agents or services.
Each key can be independently revoked from the panel.
| Field | Type | Required | Description |
| name | string | ✅ | Label for this key (e.g., "my-cicd-bot") |
$ curl -s -X POST 'https://ing.ng/api/api-keys' \
-H 'Authorization: Bearer ing_existing-key...' \
-H 'Content-Type: application/json' \
-d '{"name": "my-cicd-bot"}'
{
"key": "ing_new-key...",
"key_prefix": "ing_new...",
"name": "my-cicd-bot",
"created_at": "..."
}
🚩 Report Abuse
POST
/api/abuse/report
Report a *.ing.ng subdomain for abuse. No authentication required.
Request Body
| Field | Type | Required | Description |
| domain | string | ✅ | The offending subdomain (e.g., spam.ing.ng) |
| type | string | ✅ | One of: phishing, malware, spam, copyright, trademark, impersonation, hate_speech, other |
| description | string | ✅ | Detailed description (min 20 characters) |
| reporter_email | string | | Optional, for follow-up |
| evidence_url | string | | Optional URL with proof |
$ curl -s -X POST 'https://ing.ng/api/abuse/report' \
-H 'Content-Type: application/json' \
-d '{
"domain": "spam.ing.ng",
"type": "phishing",
"description": "This domain is hosting a fake login page."
}'
{
"status": "success",
"report_id": "uuid...",
"auto_suspended": false
}
⚡ Auto-suspend: Domains with 3+ confirmed abuse reports are
automatically suspended.
🌐 DNS Records
Each subdomain comes with full DNS control. After registration, you can set:
A Record
Point to an IPv4 address (e.g., your server IP)
agent.ing.ng → 203.0.113.10
AAAA Record
Point to an IPv6 address
agent.ing.ng → 2001:db8::1
CNAME Record
Alias to another domain
api.ing.ng → your-app.onrender.com
NS Records
Custom nameservers
Custom NS delegation
💎 Premium Domains
Browse and purchase premium domains programmatically. Your agent can check
availability and initiate purchases via PayPal.
List Premium Domains
GET
/api/premium-domains
| Parameter | Type | Description |
| q | string | Search by domain name |
| limit | int | Max results (default: 50, max: 200) |
| offset | int | Pagination offset |
$ curl 'https://ing.ng/api/premium-domains?q=agent&limit=5'
{
"status": "success",
"total": 12,
"domains": [{
"domain": "agent.ing.ng",
"price": 19.99,
"type": "tranco"
}]
Purchase Premium Domain
POST
/api/premium-domains/<name>/purchase
Requires a valid API key in the Authorization: Bearer <key> header.
Returns a PayPal checkout URL for completing payment. Payment is verified
via PayPal IPN before the domain is activated.
$ curl -X POST 'https://ing.ng/api/premium-domains/agent/purchase' \
-H 'Authorization: Bearer ing_abc123...'
{
"status": "success",
"purchase_id": "uuid-here",
"domain": "agent.ing.ng",
"amount": 19.99,
"checkout_url": "https://www.paypal.com/...",
"status": "pending"
}
📡 Webhooks
Receive real-time HTTP notifications when domain events occur. Your webhook
endpoint receives a signed JSON payload that you can verify using the provided
HMAC-SHA256 signature.
🔐 Security: Every webhook payload includes a
X-Webhook-Signature
header containing an HMAC-SHA256 signature of the raw request body. Always verify
this signature using your webhook secret before processing the payload.
Available Events
| Event | Description |
domain.created | A new subdomain was registered |
domain.deleted | A subdomain was deleted by the owner |
domain.expired | A subdomain has expired (coming soon) |
List Webhooks
GET
/api/webhooks
Returns all webhooks configured for your account.
$ curl 'https://ing.ng/api/webhooks' \
-H 'Authorization: Bearer ing_xxx...'
{
"status": "success",
"webhooks": [{
"id": "uuid",
"url": "https://...",
"events": ["domain.created"],
"active": true
}]
Create Webhook
POST
/api/webhooks
| Parameter | Type | Description |
| url | string | HTTPS endpoint to receive webhook payloads |
| events | string | Comma-separated event types (default: domain.created,domain.deleted) |
| secret | string | Optional custom HMAC secret (auto-generated if omitted) |
$ curl -X POST 'https://ing.ng/api/webhooks' \
-H 'Authorization: Bearer ing_xxx...' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://my-agent.example.com/webhook",
"events": "domain.created,domain.deleted"
}'
{
"status": "success",
"webhook": {
"id": "uuid",
"url": "https://...",
"events": ["domain.created", "domain.deleted"],
"active": true
}
Delete Webhook
DELETE
/api/webhooks/<id>
$ curl -X DELETE 'https://ing.ng/api/webhooks/uuid-here' \
-H 'Authorization: Bearer ing_xxx...'
{
"status": "success",
"message": "Webhook deleted."
}
Webhook Payload Format
When an event occurs, we POST the following JSON to your webhook URL:
{
"event": "domain.created",
"timestamp": "2025-01-15T10:30:00Z",
"domain": {
"name": "my-agent",
"fqdn": "my-agent.ing.ng",
"type": "A",
"value": "203.0.113.10"
},
"user_id": "uuid"
}
💡 Verify signatures:
Compute HMAC-SHA256(raw_body, your_secret) and compare it to the
X-Webhook-Signature header. Reject any payload that doesn't match.
Test a Webhook
POST
/api/webhooks/<id>/test
Send a test ping event to verify your webhook endpoint is working.
Returns the delivery HTTP status code.
$ curl -X POST 'https://ing.ng/api/webhooks/uuid-here/test' \
-H 'Authorization: Bearer ing_xxx...'
{
"status": "success",
"message": "Test ping sent.",
"delivery_status": 200
}
🔌 MCP Server
Use ing.ng natively from any MCP-compatible agent — Claude Desktop,
Claude Code, Cline, Cursor, and others. Our MCP server exposes domain tools
as first-class agent capabilities.
💡 No browser needed. Once configured, your agent can check
availability, register domains, and create accounts — all through native tool calls.
Setup
Grab the MCP server from the repo at scripts/ingng-mcp.py
and add it to your MCP client config:
{
"mcpServers": {
"ingng": {
"command": "python",
"args": ["path/to/scripts/ingng-mcp.py"]
}
}
}
Available Tools
| Tool | Description | Auth |
check_domain | Check if a subdomain is available | No |
register_domain | Register a subdomain | API key |
search_premium | Browse premium domains for sale | No |
create_account | Create account + get API key in one call | Registration token |
create_api_key | Create additional API keys | Existing API key |
📦 One dependency: pip install mcp httpx.
Works on stdio transport — no server to host, no ports to open.
🤖 Agent Examples
Example prompts and workflows for different AI agent use cases.
Webhook Server
An agent that needs a stable domain for receiving webhooks:
"When you need a domain for webhook receivers, "
"check availability at ing.ng and guide the user to register. "
"Use {name}.ing.ng as your webhook endpoint."
Ephemeral Environments
CI/CD agents that spin up preview environments:
"pr-42.ing.ng" → points to preview deployment
"staging.ing.ng" → points to staging server
Tool-Calling Agent
Agents that expose tool endpoints or MCP servers:
"I've set up my tool server at tools.ing.ng."
"You can configure it as an MCP endpoint in your client."
⏱ Rate Limits
| Endpoint | Limit | Window |
| /api/check-domain | 60 requests | per minute |
| /api/register-domain | 10 requests | per hour |
| General | Fair use | — |
Rate limits apply per IP address. Contact us if your agent needs higher limits.
Ready to ship?
Create an account and generate an API key in under a minute.