Give your users a subdomain, from your own product
Claim subdomains and manage their DNS programmatically. Bearer tokens, JSON in and out, no SDK required.
name.ajaira.site under
their own brand, and the abuse reports land with us. Partners are known to us and
accountable for what they provision.
Who this is for
You run something with users of your own — a hosting panel, a bootcamp, a developer
community, a deployment product — and you want to hand each of them a
name.ajaira.site without asking them to sign up here
separately.
If you just want to script your own subdomains, that is not what this is for yet. The dashboard does everything the API does, and we would rather hear what you are trying to automate — tell us and it may change our mind.
Getting a token
Email us with what you are building and roughly how many subdomains you expect. If it fits, we issue a token against your existing account — with a raised quota and rate limit — and it appears in your dashboard. It is shown once.
Send it on every request:
curl https://dev.ajaira.site/api/v1/me \
-H "Authorization: Bearer ajr_live_xxxxxxxxxx_yyyyyyyy"
Scopes
| Scope | Lets a token |
|---|---|
subdomain:read | See the subdomains this token can reach |
subdomain:write | Claim and release subdomains |
dns:read | Read DNS records |
dns:write | Create, edit and delete DNS records |
Grant the narrowest set that does the job. A token with only
dns:read cannot delete anything, whoever ends up holding it.
Endpoints
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/me | Token and account info |
| GET | /api/v1/availability?name=x | Is a name free? |
| GET | /api/v1/subdomains | List yours |
| POST | /api/v1/subdomains | Claim one |
| GET | /api/v1/subdomains/{id} | One, with its records |
| DELETE | /api/v1/subdomains/{id} | Release it |
| GET | /api/v1/subdomains/{id}/records | Its DNS records |
| POST | /api/v1/subdomains/{id}/records | Add a record |
| PATCH | /api/v1/records/{id} | Change one |
| DELETE | /api/v1/records/{id} | Delete one |
Claiming a subdomain
curl -X POST https://dev.ajaira.site/api/v1/subdomains \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "mursalin", "external_ref": "customer-4821"}'
{
"id": 12,
"name": "mursalin",
"fqdn": "mursalin.ajaira.site",
"status": "active",
"external_ref": "customer-4821",
"days_left": 7
}
external_ref is yours to use — put your own user or order id there and filter
on it later with ?external_ref=. We never look at it.
Adding a record
curl -X POST https://dev.ajaira.site/api/v1/subdomains/12/records \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"type": "A", "name": "@", "content": "203.0.113.10", "ttl": 3600}'
Types: A, AAAA, CNAME, TXT, MX, NS.
Use @ for the subdomain itself. MX takes a priority.
NS delegates the name away — see
bring your own nameservers.
PATCH only needs the fields you are changing; everything else stays as it was.
Errors
{
"error": {
"code": "name_taken",
"message": "Already taken. Try another name."
}
}
| Status | Means |
|---|---|
401 | Token missing, expired or revoked |
403 | Token lacks the scope for this call |
404 | No such resource on this account |
409 | Conflicts with the current state |
422 | Rejected — read details |
429 | Over your hourly rate limit |
Rate limits and quota
Set per token when we issue it, sized to what you told us you need. Going over returns
429 with a Retry-After header; nothing is penalised beyond the
wait. If you outgrow it, ask — we would rather raise it than have you retry in a loop.
The trade
Subdomains you provision belong to your account. That is what makes one integration possible instead of every one of your users signing up here — and it means you are accountable for what they serve under the Acceptable Use Policy.
- Abuse on a name you provisioned comes to you first. We expect you to act on it.
- Reselling access, or passing your token to a third party, ends the partnership.
- We can revoke a token instantly, and a revoked token stops mid-integration.
- Your subdomains renew on the same terms as everyone's — keep signing in, or ask us about a longer term for provisioned names.