Developer API v1.0

Built for Scalability and Innovation

Integrate domain registration and management directly into your own applications with our powerful REST API.

POST /api/v1/domains/check
{
  "domain_name": "example.co.tz"
}

// 200 OK
{
  "available": true,
  "price": 35000
}

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

http://reseller.co.tz/api/v1
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.

GET http://reseller.co.tz/api/v1/domains?q=example&status=active&per_page=25
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
        }
    }
}

POST http://reseller.co.tz/api/v1/domains/check
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
        }
    }
}

POST http://reseller.co.tz/api/v1/domains/register
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
    }
}

GET http://reseller.co.tz/api/v1/domains/example.co.tz
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"
        }
    }
}

POST http://reseller.co.tz/api/v1/domains/example.co.tz/register
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
    }
}

POST http://reseller.co.tz/api/v1/domains/example.co.tz/renew
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"
        }
    }
}

POST http://reseller.co.tz/api/v1/domains/example.co.tz/transfer
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"
        }
    }
}

POST http://reseller.co.tz/api/v1/domains/example.co.tz/sync
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"
        }
    }
}

GET http://reseller.co.tz/api/v1/domains/example.co.tz/nameservers
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"
        ]
    }
}

POST http://reseller.co.tz/api/v1/domains/example.co.tz/nameservers
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"
        ]
    }
}

GET http://reseller.co.tz/api/v1/domains/example.co.tz/child-nameservers?child_nsset_id=NSSET123
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"
                ]
            }
        ]
    }
}

POST http://reseller.co.tz/api/v1/domains/example.co.tz/child-nameservers
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"
                ]
            }
        ]
    }
}

POST http://reseller.co.tz/api/v1/domains/example.co.tz/child-nameservers
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"
                ]
            }
        ]
    }
}

GET http://reseller.co.tz/api/v1/domains/example.co.tz/whois
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"
        }
    }
}

POST http://reseller.co.tz/api/v1/domains/example.co.tz/whois
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"
        }
    }
}

POST http://reseller.co.tz/api/v1/domains/example.co.tz/epp-code
Request Payload
No request body.
Sample Response (200 OK)
{
    "success": true,
    "message": "EPP code requested successfully.",
    "data": {
        "epp_code": "sample-epp-code"
    }
}

PUT http://reseller.co.tz/api/v1/domains/example.co.tz/epp-code
Request Payload
{
    "epp_code": "new-secure-epp-code"
}
Sample Response (200 OK)
{
    "success": true,
    "message": "EPP code updated successfully.",
    "data": []
}

GET http://reseller.co.tz/api/v1/domains/example.co.tz/lock
Request Payload
No request body.
Sample Response (200 OK)
{
    "success": true,
    "message": "Domain lock status loaded successfully.",
    "data": {
        "locked": false
    }
}

PUT http://reseller.co.tz/api/v1/domains/example.co.tz/lock
Request Payload
{
    "locked": true
}
Sample Response (200 OK)
{
    "success": true,
    "message": "Domain lock updated successfully.",
    "data": {
        "locked": true
    }
}

GET http://reseller.co.tz/api/v1/domains/example.co.tz/privacy
Request Payload
No request body.
Sample Response (200 OK)
{
    "success": true,
    "message": "Whois privacy status loaded successfully.",
    "data": {
        "enabled": false
    }
}

PUT http://reseller.co.tz/api/v1/domains/example.co.tz/privacy
Request Payload
{
    "enabled": true
}
Sample Response (200 OK)
{
    "success": true,
    "message": "Whois privacy updated successfully.",
    "data": {
        "enabled": true
    }
}

GET http://reseller.co.tz/api/v1/domains/example.co.tz/dns
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
            }
        ]
    }
}

POST http://reseller.co.tz/api/v1/domains/example.co.tz/dns/provision
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
        }
    }
}

DELETE http://reseller.co.tz/api/v1/domains/example.co.tz/dns
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"
        }
    }
}

POST http://reseller.co.tz/api/v1/domains/example.co.tz/dns/records
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
            }
        ]
    }
}

PUT http://reseller.co.tz/api/v1/domains/example.co.tz/dns/records/24
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
            }
        ]
    }
}

DELETE http://reseller.co.tz/api/v1/domains/example.co.tz/dns/records/24
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.

http://reseller.co.tz/api
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
checkDomainCheck domain availability and pricing.
getDomainInfoFetch domain information.
registerDomainRegister a domain.
renewDomainRenew a domain.
transferDomainSubmit a domain transfer.
getNameservers / updateNameserversRead or update nameservers.
getWhois / updateWhoisRead or update Whois contacts.
getEPPCodeRequest the current EPP/Auth code.
provisionDns / cancelDnsEnable or cancel DNS management.
getDnsRecords / addDnsRecord / deleteDnsRecordManage DNS records.
getBalanceFetch current reseller balance.

Status Codes

Code Meaning
200Success
201Created successfully
401Unauthorized - Invalid API Key
403Forbidden - IP not whitelisted
404Resource not found or not owned by the authenticated reseller
422Validation Failed
429Too many requests
500Unexpected server error