Developer guide

ICOREHOST Reseller API documentation

Connect domain search, pricing, and reseller-controlled live registration to your service with a predictable JSON API.

Programme overview
Live base URL https://icorehost.co.ke/api/v1/reseller
Sandbox base URL https://icorehost.co.ke/api/v1/reseller/sandbox
01

Quick start

Use this order when connecting a customer-facing service.

  1. Activate your accountAn active ICOREHOST reseller account is required for API access; live mode is a separate choice you control.
  2. Create a keyOpen Reseller Centre, choose API Keys, and issue a key with only the scopes your integration needs.
  3. Choose an environmentUse sandbox while building. When the account is active, select Live API in Reseller Centre → Settings to allow real orders.
  4. Read before writingLoad the catalogue and check availability before presenting a registration price or submitting an order.
02

Operation coverage

Check a TLD before building its customer flow.

GET https://icorehost.co.ke/api/v1/reseller/capabilities?domain=available.co.ke
.co.ke / KENICAvailability, registration, renewal, domain details, nameservers, transfer-in, EPP codes, and order status.
DNS recordsNot available through KENIC. Edit records at the authoritative DNS host; nameserver changes remain available here.
CallbacksOptional signed HTTPS notifications when order status changes. Order polling works independently.
SandboxSimulates every request shape, including DNS records. A successful DNS simulation does not mean live DNS editing is available for KENIC.

The capability response includes live_mode_selected, live_admin_paused, live_platform_enabled, live_enabled_for_account, and webhook_configured. A live operation is available only when the active reseller has selected live mode, ICOREHOST has the platform service enabled, and no admin pause is in place.

03

Authentication

Send the API key as a bearer token over HTTPS on every request. Keys are shown once when created.

Authorization: Bearer YOUR_RESELLER_API_KEY
Accept: application/json

Keep the key on your server. Do not expose it in browser JavaScript, public repositories, screenshots, or client-side application bundles.

04

Catalogue and quotes

Read the supported TLDs and the current reseller quote in the account currency.

curl -sS 'https://icorehost.co.ke/api/v1/reseller/catalog' \
  -H 'Authorization: Bearer YOUR_RESELLER_API_KEY' \
  -H 'Accept: application/json'
retail_priceCurrent public catalogue price.
reseller_pricePrice after the reseller account discount.
billing_periodNumber of billing units included in the quote.
billing_unitUsually year for domain registration.
05

Availability checks

Use the check endpoint before offering a domain to a customer. The response includes availability and a quote.

curl -sS -X POST 'https://icorehost.co.ke/api/v1/reseller/domains/check' \
  -H 'Authorization: Bearer YOUR_RESELLER_API_KEY' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  --data '{"domain":"yourbrand.co.ke"}'

The live check uses the configured ICOREHOST registrar path for the selected TLD. Treat availability as time-sensitive and check again before a live registration.

06

Sandbox testing

Build and test your integration without creating real orders or spending reseller funds.

Safe by design. Sandbox domain requests validate the same account permissions and catalogue, then return simulated results. They do not call Enom or KENIC, create real domain or order records, reserve balance, or register a domain. A sandbox callback test only records and sends its test notification.

# Available test domain
curl -sS -X POST 'https://icorehost.co.ke/api/v1/reseller/sandbox/domains/check' \
  -H 'Authorization: Bearer YOUR_RESELLER_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"domain":"available.co.ke"}'

# Unavailable test domain
curl -sS -X POST 'https://icorehost.co.ke/api/v1/reseller/sandbox/domains/check' \
  -H 'Authorization: Bearer YOUR_RESELLER_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"domain":"taken.co.ke"}'
curl -sS -X POST 'https://icorehost.co.ke/api/v1/reseller/sandbox/domains/register' \
  -H 'Authorization: Bearer YOUR_RESELLER_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{
    "domain":"available.co.ke",
    "external_reference":"test-order-001",
    "contact": {
      "first_name":"Test",
      "last_name":"Customer",
      "email":"test@example.com",
      "phone":"+254700000000",
      "address1":"1 Test Street",
      "city":"Nairobi",
      "postal_code":"00100",
      "country":"KE"
    }
  }'

Sandbox registration returns a simulated completed response with a SANDBOX- provider reference. It never creates a live order, domain, invoice, or balance transaction.

GET /sandbox/domains/details?domain=available.co.keSimulated status, expiry, and nameservers.
POST /sandbox/domains/renewPass domain and external_reference.
POST /sandbox/domains/transferPass domain, external_reference, epp_code, and contact. Returns a simulated pending transfer.
PUT /sandbox/domains/nameserversPass domain, external_reference, and two to four nameservers.
GET /sandbox/domains/dns?domain=available.co.keSample DNS records; not live KENIC DNS support.
PUT /sandbox/domains/dnsPass domain, external_reference, and records.
POST /sandbox/domains/epp-codePass domain for a fake transfer code.
GET /sandbox/orders/{reference}Pass domain, action, and optional status as query parameters to test pending, completed, manual review, and failed screens.
07

Live registration

Live orders are real registrar requests paid from your reseller wallet. You can enable them yourself after account activation.

Live registration needs an active account, your Live API choice in Reseller Centre → Settings, and both ICOREHOST platform switches. If a gate is off, the endpoint returns 503 without placing or charging an order. Live orders are real and use your reseller wallet; sandbox requests never use wallet funds. ICOREHOST can pause live access for an individual account if needed.

curl -sS -X POST 'https://icorehost.co.ke/api/v1/reseller/domains/register' \
  -H 'Authorization: Bearer YOUR_RESELLER_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{
    "domain":"yourbrand.co.ke",
    "external_reference":"your-system-order-123",
    "contact": {
      "first_name":"Jane",
      "last_name":"Doe",
      "email":"jane@example.com",
      "phone":"+254700000000",
      "address1":"10 Example Road",
      "city":"Nairobi",
      "postal_code":"00100",
      "country":"KE"
    },
    "nameservers":["ns1.example.com","ns2.example.com"]
  }'

Use a unique external_reference for each order. Retry an uncertain response with the same reference and identical data. The API returns the existing order without repeating the registrar call.

08

Responses and errors

Successful responses return a data object. List endpoints also return pagination metadata.

200Read or check request completed.
201Sandbox or live registration completed.
202Processing, pending registry confirmation, or manual review. Poll the order endpoint.
401Missing, invalid, expired, or disabled API key.
403Key is missing the required scope or IP restriction does not match.
409Requested domain is unavailable.
422Request data failed validation.
503API or live registration is disabled.
501The selected registrar does not support this operation, such as KENIC DNS record editing.
09

Domain management

Operate only domains that belong to your reseller account.

GET /domains/{id}?refresh=1Read status, expiry, and nameservers. The optional refresh queries the registrar.
POST /domains/{id}/renewSend {"external_reference":"renew-123"}. Renewal uses the current catalogue quote and a reserved wallet amount.
PUT /domains/{id}/nameserversSend external_reference and nameservers with two to four hostnames.
POST /domains/transferSend domain, external_reference, epp_code, contact, and optional nameservers. An accepted transfer can remain pending_registrar until confirmed.
POST /domains/{id}/epp-codeRequires the domains.transfer scope. KENIC rotates the code and returns it only in this response.
GET /domains/{id}/dnsAvailable for Enom-hosted authoritative DNS only. KENIC .co.ke returns 501.
PUT /domains/{id}/dnsEnom only. Send external_reference and up to 50 records with hostname, type, address, and optional MX priority.
GET /orders/{id}Poll by order ID. Statuses include reserved, processing, pending_registrar, manual_review, completed, and failed.

Live writes require the appropriate API scope and Live API selected in Reseller Centre settings. For transfer-in, the key needs both domains.transfer and domains.write. If a registrar result is uncertain, funds remain held until ICOREHOST support verifies the outcome.

10

Order callbacks

Receive signed status changes or use order polling.

Set an HTTPS callback URL in Reseller Centre → Settings and copy the signing secret when it appears. Send a sandbox test from that page or call POST https://icorehost.co.ke/api/v1/reseller/sandbox/webhooks/test.

X-Icorehost-Event-ID: order.123.completed
X-Icorehost-Event: order.status_changed
X-Icorehost-Timestamp: 1790000000
X-Icorehost-Signature: sha256=<hex digest>

signed_text = timestamp + "." + raw_request_body
expected = HMAC_SHA256(signing_secret, signed_text)

Compare signatures in constant time, reject old timestamps, and deduplicate the event ID. Return a 2xx response quickly. Delivery retries up to five times; polling GET /orders/{id} remains the fallback.

11

Live activation

Move from sandbox after the integration and billing checks are complete.

  1. Complete sandbox callsTest available, unavailable, pending, completed, failed, and manual-review responses.
  2. Confirm domain operationsAgree on .co.ke pricing, registrant contact fields, nameservers, renewal, transfer handling, and the KENIC DNS limitation.
  3. Choose status deliveryConfigure a signed callback or poll orders. Keep polling as a fallback.
  4. Enable live when readyOnce your reseller account is active and ICOREHOST has enabled the platform service, select Live API in Reseller Centre → Settings. You can switch back to sandbox at any time.
WhatsApp support
Talk to Icorehost about hosting, domains, or setup.
Chat on WhatsApp