Partner API
Let your customers claim name.dotin.site from your own website or panel. JSON over HTTPS.
Base URL: https://dotin.site/api/v1
Authentication
Send your API key in the Authorization header. Keys look like sdk_ab12cd34_…. Keep them secret and use them only from your server.
curl https://dotin.site/api/v1/domains \ -H "Authorization: Bearer YOUR_API_KEY"
Rate limits
Each partner has a limit of requests per minute (default 60). Every response includes X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. When exceeded you get 429 with a Retry-After header.
Errors
Errors use standard HTTP status codes and a JSON body:
{ "error": { "code": "name_taken", "message": "This name is already taken. Try another one." } }
| Status | Codes |
|---|---|
| 400 | invalid_json |
| 401 | unauthorized |
| 403 | client_suspended, domain_not_allowed, quota_exceeded, record_limit |
| 404 | not_found |
| 409 | name_taken, name_reserved, subdomain_suspended |
| 422 | invalid_domain, invalid_name, invalid_type, invalid_content, invalid_external_ref |
| 429 | rate_limited, too_many_failed_attempts |
| 502 / 503 | dns_provider_error, maintenance |
List domains
GET /domains
{ "data": [ { "name": "dotin.site" } ] }
Subdomains
Check a name – GET /subdomains/check?label=acme&domain=dotin.site
{ "name": "acme.dotin.site", "available": true, "reason": null }
Create – POST /subdomains. external_ref is optional: your own customer ID.
curl -X POST https://dotin.site/api/v1/subdomains \
-H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"label":"acme","domain":"dotin.site","external_ref":"customer-42"}'
201 { "subdomain": { "id": 17, "name": "acme.dotin.site", "label": "acme", "domain": "dotin.site",
"status": "active", "external_ref": "customer-42", "records": 0, "created_at": "2026-01-01T10:00:00Z" } }
List – GET /subdomains?external_ref=customer-42&limit=50&offset=0
Get – GET /subdomains/{id}
Delete – DELETE /subdomains/{id} (removes all its DNS records, returns 204)
DNS records
Types: A, AAAA, CNAME, MX, TXT. name is relative: @ for the subdomain itself, or e.g. www. ttl: 1 or "auto", 300, 3600, 86400. priority is for MX.
POST /subdomains/17/records
{ "type": "A", "name": "@", "content": "203.0.113.10" }
201 { "record": { "id": 91, "type": "A", "name": "acme.dotin.site", "content": "203.0.113.10", "ttl": 1, "priority": null, "created_at": "..." } }
GET /subdomains/{id}/records · GET|PATCH /subdomains/{id}/records/{recordId} (change content, ttl, priority) · DELETE /subdomains/{id}/records/{recordId} (204)
Usage
GET /usage returns your requests and errors in the last 24 hours, subdomain count, quota and rate limit.
Abuse policy
You are responsible for subdomains created through your key. Phishing, malware, spam and illegal content are not allowed. We may suspend a subdomain or an API client that is used for abuse. Reserved names are refused and quotas apply.
Get access
Partner access is granted manually. Contact us with your company name, website and expected volume.