EPP Protocol Documentation
Enterprise-grade domain registry integration using the Extensible Provisioning Protocol (EPP). Build robust registrar systems with our RFC-compliant EPP implementation.
Registrar Accreditation Required
EPP access is exclusively available to ICANN-accredited registrars and approved partners. Connection requires certificate-based authentication and IP whitelisting. To apply for EPP credentials, please complete our registrar application process.
RFC Compliant
Full compliance with RFC 5730-5734 standards for EPP protocol implementation. Industry-standard XML messaging over secure TCP connections.
Secure Connection
TLS 1.2+ encryption with certificate-based authentication. All EPP sessions are secured with industry-standard cryptography.
High Performance
Low-latency command processing with sub-second response times. Optimized for high-volume registrar operations.
Rich Extensions
Support for DNSSEC, RGP, Launch Phase, Fee Extension, and custom Unregistry extensions for advanced functionality.
Connection Details
Production Environment
- Host: epp.unregistry.com
- Port: Available to registered users
- Protocol: TCP with TLS 1.2+
- Authentication: X.509 certificates
- Session Timeout: 300 seconds
- Max Connections: 10 per registrar
OT&E Environment
- Host: ote.unregistry.com
- Port: Available to registered users
- Test TLDs: Available to registered users
- Reset Schedule: Daily at 00:00 UTC
- Rate Limits: Relaxed for testing
- Free Testing: No charges apply
Supported Extensions
Our EPP server supports multiple standard and custom extensions to provide comprehensive domain management capabilities:
Extension | Namespace | Status | Description |
---|---|---|---|
DNSSEC | urn:ietf:params:xml:ns:secDNS-1.1 | Enabled | DNS Security Extensions support |
RGP | urn:ietf:params:xml:ns:rgp-1.0 | Enabled | Registry Grace Period operations |
Launch Phase | urn:ietf:params:xml:ns:launch-1.0 | Enabled | Sunrise and claims support |
Fee Extension | urn:ietf:params:xml:ns:epp:fee-1.0 | Enabled | Premium pricing information |
IDN | urn:ietf:params:xml:ns:idn-1.0 | Enabled | Internationalized domain names |
Allocation Token | urn:ietf:params:xml:ns:allocationToken-1.0 | Enabled | Special allocation codes |
Mark Protection | urn:ietf:params:xml:ns:mark-1.0 | Enabled | Trademark claims and marks |
Login Security | urn:ietf:params:xml:ns:epp:loginSec-1.0 | Enabled | Enhanced login security |
Funds Management | https://unregistry.org/epp/funds-1.0 | Enabled | Prepaid account management |
Identity Verification | https://unregistry.org/epp/identica-1.0 | Enabled | Enhanced identity verification |
EPP Commands
Complete implementation of standard EPP commands for comprehensive domain lifecycle management:
Authenticate and establish an EPP session
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<login>
<clID>REGISTRAR_ID</clID>
<pw>REGISTRAR_PASSWORD</pw>
<options>
<version>1.0</version>
<lang>en</lang>
</options>
<svcs>
<objURI>urn:ietf:params:xml:ns:domain-1.0</objURI>
<objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
<objURI>urn:ietf:params:xml:ns:host-1.0</objURI>
</svcs>
</login>
<clTRID>ABC-12345</clTRID>
</command>
</epp>
Check domain availability for registration
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<check>
<domain:check xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.u</domain:name>
<domain:name>test.u</domain:name>
</domain:check>
</check>
<clTRID>ABC-12346</clTRID>
</command>
</epp>
Retrieve detailed domain information
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<info>
<domain:info xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.u</domain:name>
<domain:authInfo>
<domain:pw>AUTH_CODE</domain:pw>
</domain:authInfo>
</domain:info>
</info>
<clTRID>ABC-12347</clTRID>
</command>
</epp>
Register a new domain name
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<create>
<domain:create xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.u</domain:name>
<domain:period unit="y">1</domain:period>
<domain:ns>
<domain:hostObj>ns1.example.u</domain:hostObj>
<domain:hostObj>ns2.example.u</domain:hostObj>
</domain:ns>
<domain:registrant>CONTACT-ID</domain:registrant>
<domain:contact type="admin">ADMIN-ID</domain:contact>
<domain:contact type="tech">TECH-ID</domain:contact>
<domain:authInfo>
<domain:pw>AUTH_CODE</domain:pw>
</domain:authInfo>
</domain:create>
</create>
<clTRID>ABC-12348</clTRID>
</command>
</epp>
Transfer domain between registrars
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<transfer op="request">
<domain:transfer xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.u</domain:name>
<domain:period unit="y">1</domain:period>
<domain:authInfo>
<domain:pw>TRANSFER_AUTH_CODE</domain:pw>
</domain:authInfo>
</domain:transfer>
</transfer>
<clTRID>ABC-12349</clTRID>
</command>
</epp>
Retrieve pending messages and notifications
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<poll op="req"/>
<clTRID>ABC-12350</clTRID>
</command>
</epp>
Response Codes
Standard EPP response codes for command results and error handling:
Code | Message | Description |
---|---|---|
1000 | Command completed successfully | The command was processed without errors |
1001 | Command completed successfully; action pending | Command accepted but requires additional action |
1300 | Command completed successfully; no messages | Poll response when message queue is empty |
1301 | Command completed successfully; ack to dequeue | Message retrieved, acknowledgment required |
1500 | Command completed successfully; ending session | Logout command processed successfully |
2001 | Command syntax error | XML parsing or validation error |
2003 | Required parameter missing | A required element or attribute is missing |
2004 | Parameter value range error | Value is outside acceptable range |
2005 | Parameter value syntax error | Value format is incorrect |
2104 | Billing failure | Insufficient funds or payment error |
2106 | Object is not eligible for renewal | Domain cannot be renewed at this time |
2201 | Authorization error | Invalid credentials or permissions |
2202 | Invalid authorization information | Auth code is incorrect |
2301 | Object pending transfer | Domain already has pending transfer |
2302 | Object not pending transfer | No transfer request exists |
2303 | Object does not exist | Domain or object not found |
2304 | Object status prohibits operation | Domain status prevents this action |
2305 | Object association prohibits operation | Dependencies prevent this action |
2306 | Parameter value policy error | Value violates registry policy |
2308 | Data management policy violation | Action violates data retention policy |
2400 | Command failed | General command failure |
2500 | Command failed; server closing connection | Fatal error, connection will be closed |
Integration Guide
Quick Start
Follow these steps to integrate with our EPP server:
- Request EPP credentials through the registrar portal
- Install your X.509 certificate on the client system
- Configure your EPP client with TLS 1.2+ support
- Test connection in OT&E environment
- Complete certification test suite
- Receive production credentials
Client Requirements
- TLS 1.2 or higher support
- X.509 certificate handling
- XML parsing capabilities
- TCP socket management
- Session state management
- Error handling and retry logic
Best Practices
- Implement connection pooling
- Use unique clTRID for tracking
- Handle poll messages regularly
- Implement exponential backoff
- Monitor session timeouts
- Log all transactions
Rate Limits
- Commands: 1000/minute
- Sessions: 10 concurrent
- Login attempts: 5/minute
- Check queries: 100 domains/request
- Info queries: 50/minute
- Create operations: 100/minute
Session Management
- Sessions timeout after 300 seconds of inactivity
- Use <hello> to keep sessions alive
- Always logout when done
- Handle disconnections gracefully
- Implement reconnection logic
- Track session state locally
Testing & Certification
OT&E Environment Testing
Before production access, registrars must complete our certification test suite in the OT&E environment:
Test Category | Required Tests | Pass Criteria |
---|---|---|
Session Management | Login, Logout, Hello, Keep-alive | 100% success rate |
Domain Operations | Check, Create, Info, Update, Delete, Renew | All commands successful |
Contact Management | Create, Update, Info, Delete contacts | Proper data handling |
Host Management | Create, Update, Delete nameservers | IPv4/IPv6 support |
Transfer Operations | Request, Approve, Reject, Cancel transfers | Complete transfer flow |
Extension Support | DNSSEC, RGP, Fee extension tests | Proper XML handling |
Error Handling | Invalid commands, Auth failures, Timeouts | Graceful error recovery |
Poll Queue | Retrieve and acknowledge messages | Queue management |
Resources & Documentation
RFC Standards
XML Schemas
Official IANA EPP Schema Definitions:
Client Libraries
Open-source EPP client implementations:
- PHP: php-epp-client
- Python: pyEPP
- Java: EPP-RTK
- Ruby: epp-client
- Go: go-epp
Ready to Integrate?
Start your EPP integration journey with comprehensive support from our technical team.
Apply for EPP Access REST API Alternative