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.
| domains required | Array of strings non-empty |
{- "domains": [
- "openapi-check-1.name.ng",
- "openapi-check-2.name.ng"
]
}{- "results": [
- {
- "domain": "string",
- "available": true,
- "reason": "string"
}
]
}| domain required | string |
| property name* additional property | any |
{- "change": {
- "authInfo": "Upd8-{{shortId}}!"
}
}{- "success": true,
- "resultCode": 0,
- "resultMessage": "string"
}| 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 |
{- "name": "openapi-{{shortId}}.name.ng",
- "period": 1,
- "registrant": "PLACEHOLDER",
- "nameservers": [
- "ns1.google.com",
- "ns2.google.com"
], - "authPassword": "Op3nApi-{{shortId}}!"
}{- "success": true,
- "resultCode": 0,
- "resultMessage": "string",
- "name": "string",
- "exDate": "string"
}| domain required | string |
| currentExpiryDate required | string |
| period | integer [ 1 .. 10 ] |
| property name* additional property | any |
{- "currentExpiryDate": "PLACEHOLDER",
- "period": 1
}{- "success": true,
- "resultCode": 0,
- "resultMessage": "string"
}| domain required | string |
| nameservers required | Array of strings |
{- "nameservers": [
- "ns1.google.com",
- "ns2.google.com",
- "ns3.google.com"
]
}{- "success": true,
- "resultCode": 0,
- "resultMessage": "string"
}| domain required | string |
| autoRenew required | boolean |
{- "autoRenew": true
}{- "success": true,
- "resultCode": 0,
- "resultMessage": "string"
}| domain required | string |
| property name* additional property | any |
{ }{- "success": true,
- "resultCode": 0,
- "resultMessage": "string"
}| domain required | string Example: ngdomain.ng |
| authPassword | string |
| period | integer [ 1 .. 10 ] |
| property name* additional property | any |
{- "authPassword": "changeme",
- "period": 1
}{- "success": true,
- "resultCode": 0,
- "resultMessage": "string"
}| 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 |
{- "id": "E2E-{{shortId}}",
- "name": "OpenAPI E2E",
- "organisation": "RestEpp E2E",
- "addressLines": [
- "1 Test Street"
], - "city": "Uyo",
- "state": "AK",
- "postcode": "100001",
- "country": "NG",
- "phone": "+234.08000000000",
- "email": "e2e@restepp.dev"
}{- "success": true,
- "resultCode": 0,
- "resultMessage": "string",
- "id": "string"
}| id required | string |
object (ContactStatusUpdate) | |
object (ContactStatusUpdate) | |
object (ContactChangeFields) | |
| property name* additional property | any |
{- "change": {
- "email": "updated-{{shortId}}@restepp.dev"
}
}{- "success": true,
- "resultCode": 0,
- "resultMessage": "string"
}| 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 |
{- "name": "ns1-{{shortId}}.example.com",
- "addresses": [
- {
- "address": "192.0.2.1",
- "ip": "v4"
}
]
}{- "success": true,
- "resultCode": 0,
- "resultMessage": "string",
- "name": "string"
}| host required | string |
object (HostUpdateAdd) | |
object (HostUpdateRemove) | |
object (HostUpdateChange) | |
| property name* additional property | any |
{- "add": {
- "addresses": [
- {
- "address": "192.0.2.2",
- "ip": "v4"
}
]
}, - "remove": {
- "addresses": [
- {
- "address": "192.0.2.1",
- "ip": "v4"
}
]
}
}{- "success": true,
- "resultCode": 0,
- "resultMessage": "string"
}| email required | string <email> |
{- "email": "openapi-login-{{shortId}}@restepp.dev"
}{ }| email required | string <email> |
| firstName required | string non-empty |
| lastName required | string non-empty |
{- "email": "openapi-signup-{{shortId}}@restepp.dev",
- "firstName": "OpenAPI",
- "lastName": "Tester"
}{ }| token required | string |
{- "token": "deadbeefdeadbeefdeadbeefdeadbeef"
}{ }| name | string |
| firstName | string |
| lastName | string |
| phone | string |
| address | string |
{- "name": "OpenAPI E2E Tester",
- "phone": "+1.5555550100",
- "address": "123 Test Ave, Testville"
}{- "userId": "string",
- "name": "string",
- "firstName": "string",
- "lastName": "string",
- "phone": "string",
- "address": "string",
- "plan": "free",
- "createdAt": 0
}| label | string |
| host required | string |
| port required | integer [ 1 .. 65535 ] |
| username required | string |
| password required | string |
{- "label": "openapi-e2e",
- "host": "ote.registry.ng",
- "port": 700,
- "username": "grassroot",
- "password": "XWM1q8m8G8qs"
}{- "keyId": "string",
- "apiKey": "string",
- "credHash": "string",
- "hostHint": "string",
- "label": "string"
}{- "transactions": [
- {
- "id": "string",
- "amount": 0,
- "currency": "string",
- "status": "string",
- "created": "2019-08-24T14:15:22Z",
- "receiptUrl": "string"
}
]
}