RestEpp API (1.0.0)

Download OpenAPI specification:

RestEpp is a REST + OpenAPI facade over EPP registries. Developers mint an API key that encodes one EPP credential (username, password, host, port); RestEpp translates clean RESTful JSON endpoints into EPP commands via the epp-client library. The raw EPP credential is never stored server-side.

SOURCE OF TRUTH for the API contract. npm run generate:schema emits src/schema/api/* (Zod schemas + operation/route table) consumed by the router; generate:api-docs and generate:api-tests also derive from here.

misc

Health and utility endpoints

Health check

Responses

Response samples

Content type
application/json
{
  • "message": "pong"
}

domains

Domain availability, info, and lifecycle operations

Check a single domain's availability

Authorizations:
apiKey
path Parameters
domain
required
string
Example: openapi-check.name.ng

Responses

Response samples

Content type
application/json
{
  • "domain": "string",
  • "available": true,
  • "reason": "string"
}

Batch domain availability check

Authorizations:
apiKey
Request Body schema: application/json
required
domains
required
Array of strings non-empty

Responses

Request samples

Content type
application/json
{
  • "domains": [
    ]
}

Response samples

Content type
application/json
{
  • "results": [
    ]
}

Get domain info

Authorizations:
apiKey
path Parameters
domain
required
string

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "name": "string",
  • "exDate": "string",
  • "registrant": "string",
  • "status": [
    ],
  • "nameservers": [
    ]
}

Update a domain (add/remove/change)

Authorizations:
apiKey
path Parameters
domain
required
string
Request Body schema: application/json
required
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "change": {
    }
}

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

Delete a domain

Authorizations:
apiKey
path Parameters
domain
required
string

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

Register a domain

Authorizations:
apiKey
Request Body schema: application/json
required
name
required
string
period
integer [ 1 .. 10 ]
registrant
required
string
nameservers
Array of strings
contacts
Array of any
authPassword
string
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "name": "openapi-{{shortId}}.name.ng",
  • "period": 1,
  • "registrant": "PLACEHOLDER",
  • "nameservers": [
    ],
  • "authPassword": "Op3nApi-{{shortId}}!"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string",
  • "name": "string",
  • "exDate": "string"
}

Renew a domain

Authorizations:
apiKey
path Parameters
domain
required
string
Request Body schema: application/json
required
currentExpiryDate
required
string
period
integer [ 1 .. 10 ]
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "currentExpiryDate": "PLACEHOLDER",
  • "period": 1
}

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

Replace a domain's nameserver set

Authorizations:
apiKey
path Parameters
domain
required
string
Request Body schema: application/json
required
nameservers
required
Array of strings

Responses

Request samples

Content type
application/json
{
  • "nameservers": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

Set a domain's auto-renew flag

Authorizations:
apiKey
path Parameters
domain
required
string
Request Body schema: application/json
required
autoRenew
required
boolean

Responses

Request samples

Content type
application/json
{
  • "autoRenew": true
}

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

Request restore of a domain (RGP)

Authorizations:
apiKey
path Parameters
domain
required
string

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

Submit an RGP restore report

Authorizations:
apiKey
path Parameters
domain
required
string
Request Body schema: application/json
required
property name*
additional property
any

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

transfers

Domain transfer request/query/approve/reject/cancel

Request a domain transfer

Authorizations:
apiKey
path Parameters
domain
required
string
Example: ngdomain.ng
Request Body schema: application/json
required
authPassword
string
period
integer [ 1 .. 10 ]
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "authPassword": "changeme",
  • "period": 1
}

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

Query transfer status

Authorizations:
apiKey
path Parameters
domain
required
string
Example: ngdomain.ng

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

Cancel a pending transfer

Authorizations:
apiKey
path Parameters
domain
required
string
Example: ngdomain.ng

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

Approve a pending transfer

Authorizations:
apiKey
path Parameters
domain
required
string

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

Reject a pending transfer

Authorizations:
apiKey
path Parameters
domain
required
string

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

contacts

Contact object operations

Check a contact ID's availability

Authorizations:
apiKey
path Parameters
id
required
string
Example: OPENAPI-CHECK-1

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "available": true,
  • "reason": "string"
}

Create a contact

Authorizations:
apiKey
Request Body schema: application/json
required
id
required
string

Unique identifier for the new contact.

name
required
string

Full name of the contact.

organisation
string

Organization or company name.

Array of strings or string

Street address line(s).

city
required
string

City name.

state
string

State or province name.

postcode
string

Postal or ZIP code.

country
required
string = 2 characters

Two-letter ISO 3166-1 alpha-2 country code.

phone
string

Phone number in E.164 format (e.g., +1.5551234567).

email
required
string <email>

Contact email address.

authInfo
string

Authorization code for transfer operations.

property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "id": "E2E-{{shortId}}",
  • "name": "OpenAPI E2E",
  • "organisation": "RestEpp E2E",
  • "addressLines": [
    ],
  • "city": "Uyo",
  • "state": "AK",
  • "postcode": "100001",
  • "country": "NG",
  • "phone": "+234.08000000000",
  • "email": "e2e@restepp.dev"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string",
  • "id": "string"
}

Get contact info

Authorizations:
apiKey
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "id": "string"
}

Update a contact

Authorizations:
apiKey
path Parameters
id
required
string
Request Body schema: application/json
required
object (ContactStatusUpdate)
object (ContactStatusUpdate)
object (ContactChangeFields)
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "change": {
    }
}

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

Delete a contact

Authorizations:
apiKey
path Parameters
id
required
string
Example: PLACEHOLDER

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

hosts

Host (nameserver) object operations

Check a host's availability

Authorizations:
apiKey
path Parameters
host
required
string
Example: ns1.openapi-check.example.com

Responses

Response samples

Content type
application/json
{
  • "host": "string",
  • "available": true,
  • "reason": "string"
}

Create a host

Authorizations:
apiKey
Request Body schema: application/json
required
name
required
string

Fully qualified hostname to create.

Array of objects (HostAddress)

IP addresses to associate with this host (glue records).

property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "name": "ns1-{{shortId}}.example.com",
  • "addresses": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string",
  • "name": "string"
}

Get host info

Authorizations:
apiKey
path Parameters
host
required
string

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "name": "string"
}

Update a host

Authorizations:
apiKey
path Parameters
host
required
string
Request Body schema: application/json
required
object (HostUpdateAdd)
object (HostUpdateRemove)
object (HostUpdateChange)
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "add": {
    },
  • "remove": {
    }
}

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

Delete a host

Authorizations:
apiKey
path Parameters
host
required
string

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

poll

EPP message queue (poll) operations

Peek the next poll message

Authorizations:
apiKey

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

Acknowledge (dequeue) a poll message

Authorizations:
apiKey
path Parameters
msgId
required
string

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "resultCode": 0,
  • "resultMessage": "string"
}

auth

Dashboard passwordless (magic-link) authentication

Request a magic-link login email

Authorizations:
(dashboardOriginrecaptcha)
Request Body schema: application/json
required
email
required
string <email>

Responses

Request samples

Content type
application/json
{
  • "email": "openapi-login-{{shortId}}@restepp.dev"
}

Response samples

Content type
application/json
{ }

Request signup (sends magic-link email)

Authorizations:
(dashboardOriginrecaptcha)
Request Body schema: application/json
required
email
required
string <email>
firstName
required
string non-empty
lastName
required
string non-empty

Responses

Request samples

Content type
application/json
{
  • "email": "openapi-signup-{{shortId}}@restepp.dev",
  • "firstName": "OpenAPI",
  • "lastName": "Tester"
}

Response samples

Content type
application/json
{ }

Verify a one-time token, set the session cookie

Authorizations:
dashboardOrigin
Request Body schema: application/json
required
token
required
string

Responses

Request samples

Content type
application/json
{
  • "token": "deadbeefdeadbeefdeadbeefdeadbeef"
}

Response samples

Content type
application/json
{ }

Clear the session

Authorizations:
(dashboardOriginsession)

Responses

Response samples

Content type
application/json
{ }

user

Dashboard user profile / contact info

Get the current user's profile

Authorizations:
(dashboardOriginsession)

Responses

Response samples

Content type
application/json
{
  • "userId": "string",
  • "name": "string",
  • "firstName": "string",
  • "lastName": "string",
  • "phone": "string",
  • "address": "string",
  • "plan": "free",
  • "createdAt": 0
}

Update the current user's contact info

Authorizations:
(dashboardOriginsession)
Request Body schema: application/json
required
name
string
firstName
string
lastName
string
phone
string
address
string

Responses

Request samples

Content type
application/json
{
  • "name": "OpenAPI E2E Tester",
  • "phone": "+1.5555550100",
  • "address": "123 Test Ave, Testville"
}

Response samples

Content type
application/json
{
  • "userId": "string",
  • "name": "string",
  • "firstName": "string",
  • "lastName": "string",
  • "phone": "string",
  • "address": "string",
  • "plan": "free",
  • "createdAt": 0
}

Current-month request usage for the signed-in user

Authorizations:
(dashboardOriginsession)

Responses

Response samples

Content type
application/json
{
  • "month": "string",
  • "count": 0,
  • "limit": 0,
  • "plan": "free"
}

keys

Dashboard API-key management

List the current user's API keys

Authorizations:
(dashboardOriginsession)

Responses

Response samples

Content type
application/json
{
  • "keys": [
    ]
}

Mint a new API key (validates EPP creds live before minting)

Authorizations:
(dashboardOriginsession)
Request Body schema: application/json
required
label
string
host
required
string
port
required
integer [ 1 .. 65535 ]
username
required
string
password
required
string

Responses

Request samples

Content type
application/json
{
  • "label": "openapi-e2e",
  • "host": "ote.registry.ng",
  • "port": 700,
  • "username": "grassroot",
  • "password": "XWM1q8m8G8qs"
}

Response samples

Content type
application/json
{
  • "keyId": "string",
  • "apiKey": "string",
  • "credHash": "string",
  • "hostHint": "string",
  • "label": "string"
}

Revoke an API key

Authorizations:
(dashboardOriginsession)
path Parameters
keyId
required
string

Responses

Response samples

Content type
application/json
{ }

billing

Stripe checkout, portal, and webhooks

Start a Stripe Checkout session (upgrade to Pro)

Authorizations:
(dashboardOriginsession)

Responses

Response samples

Content type
application/json
{
  • "url": "string"
}

Open the Stripe Billing Portal

Authorizations:
(dashboardOriginsession)

Responses

Response samples

Content type
application/json
{
  • "url": "string"
}

Recent Stripe payment/invoice history for the signed-in user

Authorizations:
(dashboardOriginsession)

Responses

Response samples

Content type
application/json
{
  • "transactions": [
    ]
}

Stripe webhook (signature-verified; handled outside normal dispatch)

Request Body schema: application/json
required
Schema not provided

Responses

Request samples

Content type
application/json
{
  • "placeholder": true
}

Response samples

Content type
application/json
{
  • "received": true
}