Quick Start
Integrate our API into your backend in seconds using standard HTTP tools like cURL.
curl -X POST "http://reseller.co.tz/api/v1/domains/check" \
-H "X-API-KEY: your_reseller_api_key" \
-H "Accept: application/json" \
-d '{"domain_name": "example.co.tz"}'
Authentication
All API requests must be authenticated using your unique API key found in the Reseller Portal.
| Header | Value |
|---|---|
X-API-KEY |
Your unique reseller API key |
Accept |
application/json |
Response Formats
Every v1 response uses a predictable JSON envelope. Registry and DNS errors are intentionally general so provider details, private configuration, and credentials stay hidden from public integrations.
Success
{
"success": true,
"message": "Domain renewed successfully.",
"data": {
"domain": {
"domain_name": "example.co.tz",
"status": "active"
}
}
}
Validation or Registry Error
{
"success": false,
"message": "The registry could not complete this request. Please try again later.",
"errors": {
"registry": [
"The registry could not complete this request. Please try again later."
]
}
}
API Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /domains |
List the authenticated reseller's domains. |
| POST | /domains/check |
Check availability and return matching active catalog pricing. |
| POST | /domains/register |
Register a domain and charge reseller balance. |
| GET | /domains/{domain} |
Fetch one owned domain by ID or domain name. |
| POST | /domains/{domain}/register |
Register an owned cancelled domain again. |
| POST | /domains/{domain}/renew |
Renew an owned domain. |
| POST | /domains/{domain}/transfer |
Submit transfer with Auth/EPP code. |
| POST | /domains/{domain}/sync |
Refresh local domain metadata. |
| GET | /domains/{domain}/nameservers |
Fetch current nameservers. |
| POST | /domains/{domain}/nameservers |
Update nameservers. |
| GET | /domains/{domain}/child-nameservers |
Fetch saved child nameservers and glue records for supported extensions. |
| POST | /domains/{domain}/child-nameservers |
Save child nameservers and optionally apply them as active nameservers. |
| GET | /domains/{domain}/whois |
Fetch current Whois contact details. |
| POST | /domains/{domain}/whois |
Update Whois contacts. |
| POST | /domains/{domain}/epp-code |
Request the current EPP/Auth code. |
| PUT | /domains/{domain}/epp-code |
Set a new EPP/Auth code. |
| GET | /domains/{domain}/lock |
Fetch domain lock status. |
| PUT | /domains/{domain}/lock |
Enable or disable domain lock. |
| GET | /domains/{domain}/privacy |
Fetch Whois privacy status where supported. |
| PUT | /domains/{domain}/privacy |
Enable or disable Whois privacy where supported. |
| GET | /domains/{domain}/dns |
Fetch DNS management status. |
| POST | /domains/{domain}/dns/provision |
Enable DNS management for an owned domain. |
| DELETE | /domains/{domain}/dns |
Cancel DNS management for an owned domain. |
| POST | /domains/{domain}/dns/records |
Create a DNS record. |
| PUT | /domains/{domain}/dns/records/{record} |
Update a DNS record by record line ID. |
| DELETE | /domains/{domain}/dns/records/{record} |
Delete a DNS record by record line ID. |
Sample Payloads and Responses
Use these examples as implementation templates. Replace sample domains, contact data, record IDs, and secret codes with your real customer values.
Request Payload
No request body.
Sample Response (200 OK)
{
"success": true,
"message": "Domains loaded successfully.",
"data": {
"domains": [
{
"id": 123,
"domain_name": "example.co.tz",
"status": "active",
"registry_status": "active",
"registration_date": "2026-05-28",
"expiry_date": "2027-05-28",
"lock_status": false,
"privacy_status": false,
"last_synced_at": "2026-05-28T12:00:00.000000Z"
}
],
"pagination": {
"current_page": 1,
"per_page": 25,
"total": 1,
"last_page": 1
}
}
}
Request Payload
{
"domain_name": "example.co.tz"
}
Sample Response (200 OK)
{
"success": true,
"message": "Domain availability checked successfully.",
"data": {
"available": true,
"domain_name": "example.co.tz",
"price": {
"registration": 35000,
"renewal": 35000,
"transfer": 0
}
}
}
Request Payload
{
"domain_name": "example.co.tz",
"period": 1,
"nameservers": [
"ns1.example.co.tz",
"ns2.example.co.tz"
],
"provision_dns": false,
"registrant": {
"name": "Jane Doe",
"organization": "Jane Doe Ltd",
"address1": "123 Registry Road",
"city": "Dar es Salaam",
"state": "Dar es Salaam",
"postcode": "11101",
"country": "TZ",
"phone": "+255.754123456",
"email": "jane@example.co.tz"
},
"admin": {
"name": "Jane Doe",
"organization": "Jane Doe Ltd",
"address1": "123 Registry Road",
"city": "Dar es Salaam",
"state": "Dar es Salaam",
"postcode": "11101",
"country": "TZ",
"phone": "+255.754123456",
"email": "jane@example.co.tz"
}
}
Sample Response (201 Created)
{
"success": true,
"message": "Domain registered successfully.",
"data": {
"domain": {
"id": 123,
"domain_name": "example.co.tz",
"status": "active",
"registry_status": "active",
"registration_date": "2026-05-28",
"expiry_date": "2027-05-28",
"lock_status": false,
"privacy_status": false,
"last_synced_at": "2026-05-28T12:00:00.000000Z"
},
"dns": null
}
}
Request Payload
No request body.
Sample Response (200 OK)
{
"success": true,
"message": "Domain loaded successfully.",
"data": {
"domain": {
"id": 123,
"domain_name": "example.co.tz",
"status": "active",
"registry_status": "active",
"registration_date": "2026-05-28",
"expiry_date": "2027-05-28",
"lock_status": false,
"privacy_status": false,
"last_synced_at": "2026-05-28T12:00:00.000000Z"
}
}
}
Request Payload
{
"period": 1,
"nameservers": [
"ns1.example.co.tz",
"ns2.example.co.tz"
],
"registrant": {
"name": "Jane Doe",
"organization": "Jane Doe Ltd",
"address1": "123 Registry Road",
"city": "Dar es Salaam",
"state": "Dar es Salaam",
"postcode": "11101",
"country": "TZ",
"phone": "+255.754123456",
"email": "jane@example.co.tz"
},
"admin": {
"name": "Jane Doe",
"organization": "Jane Doe Ltd",
"address1": "123 Registry Road",
"city": "Dar es Salaam",
"state": "Dar es Salaam",
"postcode": "11101",
"country": "TZ",
"phone": "+255.754123456",
"email": "jane@example.co.tz"
}
}
Sample Response (201 Created)
{
"success": true,
"message": "Domain registered successfully.",
"data": {
"domain": {
"id": 123,
"domain_name": "example.co.tz",
"status": "active",
"registry_status": "active",
"registration_date": "2026-05-28",
"expiry_date": "2027-05-28",
"lock_status": false,
"privacy_status": false,
"last_synced_at": "2026-05-28T12:00:00.000000Z"
},
"dns": null
}
}
Request Payload
{
"period": 1
}
Sample Response (200 OK)
{
"success": true,
"message": "Domain renewed successfully.",
"data": {
"domain": {
"id": 123,
"domain_name": "example.co.tz",
"status": "active",
"registry_status": "active",
"registration_date": "2026-05-28",
"expiry_date": "2028-05-28",
"lock_status": false,
"privacy_status": false,
"last_synced_at": "2026-05-28T12:00:00.000000Z"
}
}
}
Request Payload
{
"auth_code": "sample-transfer-code",
"registrant": {
"name": "Jane Doe",
"organization": "Jane Doe Ltd",
"address1": "123 Registry Road",
"city": "Dar es Salaam",
"state": "Dar es Salaam",
"postcode": "11101",
"country": "TZ",
"phone": "+255.754123456",
"email": "jane@example.co.tz"
},
"admin": {
"name": "Jane Doe",
"organization": "Jane Doe Ltd",
"address1": "123 Registry Road",
"city": "Dar es Salaam",
"state": "Dar es Salaam",
"postcode": "11101",
"country": "TZ",
"phone": "+255.754123456",
"email": "jane@example.co.tz"
}
}
Sample Response (200 OK)
{
"success": true,
"message": "Domain transfer submitted successfully.",
"data": {
"domain": {
"id": 123,
"domain_name": "example.co.tz",
"status": "pending_transfer",
"registry_status": "pending_transfer",
"registration_date": "2026-05-28",
"expiry_date": "2027-05-28",
"lock_status": false,
"privacy_status": false,
"last_synced_at": "2026-05-28T12:00:00.000000Z"
}
}
}
Request Payload
No request body.
Sample Response (200 OK)
{
"success": true,
"message": "Domain synced successfully.",
"data": {
"domain": {
"id": 123,
"domain_name": "example.co.tz",
"status": "active",
"registry_status": "active",
"registration_date": "2026-05-28",
"expiry_date": "2027-05-28",
"lock_status": false,
"privacy_status": false,
"last_synced_at": "2026-05-28T12:00:00.000000Z"
}
}
}
Request Payload
No request body.
Sample Response (200 OK)
{
"success": true,
"message": "Nameservers loaded successfully.",
"data": {
"nameservers": [
"ns1.example.co.tz",
"ns2.example.co.tz"
]
}
}
Request Payload
{
"nameservers": [
"ns1.example.co.tz",
"ns2.example.co.tz"
]
}
Sample Response (200 OK)
{
"success": true,
"message": "Nameservers updated successfully.",
"data": {
"nameservers": [
"ns1.example.co.tz",
"ns2.example.co.tz"
]
}
}
Request Payload
No request body.
Sample Response (200 OK)
{
"success": true,
"message": "Child nameservers loaded successfully.",
"data": {
"child_nsset_id": "NSSET123",
"nameservers": [
{
"label": "ns1",
"name": "ns1.example.co.tz",
"addresses": [
"192.0.2.10"
]
},
{
"label": "ns2",
"name": "ns2.example.co.tz",
"addresses": [
"192.0.2.11"
]
}
]
}
}
Request Payload
{
"child_nameserver_action": "save_child_nameservers",
"child_nameservers": [
{
"label": "ns1",
"addresses": "192.0.2.10, 2001:db8::10"
},
{
"label": "ns2",
"addresses": "192.0.2.11"
}
]
}
Sample Response (200 OK)
{
"success": true,
"message": "Child nameservers saved successfully.",
"data": {
"child_nsset_id": "NSSET123",
"nameservers": [
{
"name": "ns1.example.co.tz",
"addresses": [
"192.0.2.10",
"2001:db8::10"
]
},
{
"name": "ns2.example.co.tz",
"addresses": [
"192.0.2.11"
]
}
]
}
}
Request Payload
{
"child_nameserver_action": "use_child_nameservers",
"child_nameservers": [
{
"label": "ns1",
"addresses": "192.0.2.10"
},
{
"label": "ns2",
"addresses": "192.0.2.11"
}
]
}
Sample Response (200 OK)
{
"success": true,
"message": "Child nameservers saved and applied successfully.",
"data": {
"child_nsset_id": "NSSET123",
"nameservers": [
{
"name": "ns1.example.co.tz",
"addresses": [
"192.0.2.10"
]
},
{
"name": "ns2.example.co.tz",
"addresses": [
"192.0.2.11"
]
}
]
}
}
Request Payload
No request body.
Sample Response (200 OK)
{
"success": true,
"message": "Whois contact details loaded successfully.",
"data": {
"registrant": {
"name": "Jane Doe",
"organization": "Jane Doe Ltd",
"address1": "123 Registry Road",
"city": "Dar es Salaam",
"state": "Dar es Salaam",
"postcode": "11101",
"country": "TZ",
"phone": "+255.754123456",
"email": "jane@example.co.tz"
},
"admin": {
"name": "Jane Doe",
"organization": "Jane Doe Ltd",
"address1": "123 Registry Road",
"city": "Dar es Salaam",
"state": "Dar es Salaam",
"postcode": "11101",
"country": "TZ",
"phone": "+255.754123456",
"email": "jane@example.co.tz"
}
}
}
Request Payload
{
"registrant": {
"name": "Jane Doe",
"organization": "Jane Doe Ltd",
"address1": "123 Registry Road",
"city": "Dar es Salaam",
"state": "Dar es Salaam",
"postcode": "11101",
"country": "TZ",
"phone": "+255.754123456",
"email": "jane@example.co.tz"
},
"admin": {
"name": "Jane Doe",
"organization": "Jane Doe Ltd",
"address1": "123 Registry Road",
"city": "Dar es Salaam",
"state": "Dar es Salaam",
"postcode": "11101",
"country": "TZ",
"phone": "+255.754123456",
"email": "jane@example.co.tz"
}
}
Sample Response (200 OK)
{
"success": true,
"message": "Whois contact details updated successfully.",
"data": {
"registrant": {
"name": "Jane Doe",
"organization": "Jane Doe Ltd",
"address1": "123 Registry Road",
"city": "Dar es Salaam",
"state": "Dar es Salaam",
"postcode": "11101",
"country": "TZ",
"phone": "+255.754123456",
"email": "jane@example.co.tz"
},
"admin": {
"name": "Jane Doe",
"organization": "Jane Doe Ltd",
"address1": "123 Registry Road",
"city": "Dar es Salaam",
"state": "Dar es Salaam",
"postcode": "11101",
"country": "TZ",
"phone": "+255.754123456",
"email": "jane@example.co.tz"
}
}
}
Request Payload
No request body.
Sample Response (200 OK)
{
"success": true,
"message": "EPP code requested successfully.",
"data": {
"epp_code": "sample-epp-code"
}
}
Request Payload
{
"epp_code": "new-secure-epp-code"
}
Sample Response (200 OK)
{
"success": true,
"message": "EPP code updated successfully.",
"data": []
}
Request Payload
No request body.
Sample Response (200 OK)
{
"success": true,
"message": "Domain lock status loaded successfully.",
"data": {
"locked": false
}
}
Request Payload
{
"locked": true
}
Sample Response (200 OK)
{
"success": true,
"message": "Domain lock updated successfully.",
"data": {
"locked": true
}
}
Request Payload
No request body.
Sample Response (200 OK)
{
"success": true,
"message": "Whois privacy status loaded successfully.",
"data": {
"enabled": false
}
}
Request Payload
{
"enabled": true
}
Sample Response (200 OK)
{
"success": true,
"message": "Whois privacy updated successfully.",
"data": {
"enabled": true
}
}
Request Payload
No request body.
Sample Response (200 OK)
{
"success": true,
"message": "DNS records loaded successfully.",
"data": {
"dns_service": {
"id": 10,
"status": "active",
"zone": "example.co.tz",
"provisioned_at": "2026-05-28T12:00:00.000000Z",
"cancelled_at": null
},
"records": [
{
"line": 24,
"type": "A",
"name": "@",
"value": "192.0.2.10",
"ttl": 14400
}
]
}
}
Request Payload
No request body.
Sample Response (201 Created)
{
"success": true,
"message": "DNS management has been enabled.",
"data": {
"dns_service": {
"id": 10,
"status": "active",
"zone": "example.co.tz",
"provisioned_at": "2026-05-28T12:00:00.000000Z",
"cancelled_at": null
}
}
}
Request Payload
No request body.
Sample Response (200 OK)
{
"success": true,
"message": "DNS management has been cancelled.",
"data": {
"dns_service": {
"id": 10,
"status": "cancelled",
"zone": "example.co.tz",
"provisioned_at": "2026-05-28T12:00:00.000000Z",
"cancelled_at": "2026-05-28T12:30:00.000000Z"
}
}
}
Request Payload
{
"type": "A",
"name": "@",
"value": "192.0.2.10",
"ttl": 14400,
"replace_existing": true
}
Sample Response (201 Created)
{
"success": true,
"message": "DNS records loaded successfully.",
"data": {
"records": [
{
"line": 24,
"type": "A",
"name": "@",
"value": "192.0.2.10",
"ttl": 14400
}
]
}
}
Request Payload
{
"type": "A",
"name": "@",
"value": "192.0.2.20",
"ttl": 14400
}
Sample Response (200 OK)
{
"success": true,
"message": "DNS records loaded successfully.",
"data": {
"records": [
{
"line": 24,
"type": "A",
"name": "@",
"value": "192.0.2.20",
"ttl": 14400
}
]
}
}
Request Payload
No request body.
Sample Response (200 OK)
{
"success": true,
"message": "DNS records loaded successfully.",
"data": {
"records": []
}
}
Legacy API Support
Older integrations can continue posting action-based requests to the legacy endpoint. New projects should use /api/v1 because it is easier to validate, audit, and extend.
Legacy Request
{
"action": "registerDomain",
"domainName": "example.co.tz",
"period": 1,
"nameservers": ["ns1.example.co.tz", "ns2.example.co.tz"],
"registrantInfo": {
"name": "Jane Doe",
"organization": "Jane Doe Ltd",
"address1": "123 Registry Road",
"city": "Dar es Salaam",
"state": "Dar es Salaam",
"postcode": "11101",
"country": "TZ",
"phone": "+255.754123456",
"email": "jane@example.co.tz"
}
}
Legacy Response
{
"status": "success",
"message": "Domain registered successfully.",
"data": {
"domain": {
"domain_name": "example.co.tz",
"status": "active"
}
},
"meta": {
"balance_before": 100000,
"balance_after": 65000
}
}
| Action | Purpose |
|---|---|
checkDomain | Check domain availability and pricing. |
getDomainInfo | Fetch domain information. |
registerDomain | Register a domain. |
renewDomain | Renew a domain. |
transferDomain | Submit a domain transfer. |
getNameservers / updateNameservers | Read or update nameservers. |
getWhois / updateWhois | Read or update Whois contacts. |
getEPPCode | Request the current EPP/Auth code. |
provisionDns / cancelDns | Enable or cancel DNS management. |
getDnsRecords / addDnsRecord / deleteDnsRecord | Manage DNS records. |
getBalance | Fetch current reseller balance. |
Status Codes
| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Created successfully |
| 401 | Unauthorized - Invalid API Key |
| 403 | Forbidden - IP not whitelisted |
| 404 | Resource not found or not owned by the authenticated reseller |
| 422 | Validation Failed |
| 429 | Too many requests |
| 500 | Unexpected server error |