The EPP Protocol Explained: How Registries and Registrars Provision Every Domain

· Last reviewed · 17 min read

EPP, the Extensible Provisioning Protocol, is the standard machine language a registrar speaks to a registry to register, manage, and transfer a domain. Every time a name is created, locked, unlocked, renewed, or moved between registrars, an EPP message carries the instruction. It is defined by the IETF in RFC 5730, the base specification, and a family of companion RFCs.

This guide explains the protocol in plain terms and at the level a domain buyer needs. It covers what EPP is, the command set, the object mappings, the status codes that lock or release a name, and the one point of confusion the whole search query carries: the difference between EPP the protocol and the EPP code, the transfer authorization string registrars hand to buyers.

That distinction matters at the moment of acquisition. When a domain moves from a seller to a buyer, an EPP transfer command and an authorization code do the work. SEO Domains operates the curated marketplace where aged and expired domains are sourced and transferred through that exact mechanism, so understanding EPP is understanding how a name lands in your account.

What is the EPP protocol?

The EPP protocol, or Extensible Provisioning Protocol, is an XML-based standard that lets a registrar communicate with a registry to provision and manage domain names. The registrar sends structured commands, the registry acts on them and replies, and the protocol governs registration, updates, renewals, transfers, and deletions. It is specified by the IETF in RFC 5730 and a set of companion RFCs.

The word provisioning is the key. EPP is not how a browser reaches a website, and it is not the DNS that resolves a name to an address. It is the back-office channel through which the registrar that sold a domain instructs the registry that holds the master record. The registry is the authoritative database for a top-level domain, the registrar is the retailer, and EPP is the wire between them.

The plain-English definition

Picture the registry as the central land registry for a country, the single book that records who holds every plot. The registrar is the estate agent the public deals with. When a buyer registers, renews, or transfers a name, the agent does not edit the master book by hand. It sends a formatted instruction, and EPP is the format of that instruction and the reply that confirms it.

Why a domain buyer should care about a registrar-registry protocol

EPP looks like pure plumbing, yet three things a buyer touches directly are EPP outputs. The status codes that show whether a name is locked or transferable are EPP statuses. The authorization code needed to move a domain is exchanged through EPP. The transfer itself is an EPP command. A buyer who understands the protocol reads those signals correctly instead of guessing.

This is the lens the rest of this guide keeps. The technical detail is grounded in the standards, and every section returns to what the mechanic means for someone acquiring a name. The broader context of who sets these rules sits in ICANN’s role in the domain system.

A short history: from RRP to RFC 5730

EPP grew out of the need for an open, multi-registrar provisioning standard. It replaced the older Registry Registrar Protocol, was first published by the IETF as RFC 3730 in 2004, and reached its current form as RFC 5730 in 2009, which the IETF designated internet standard STD 69. A family of companion RFCs maps the objects EPP manages.

The Registry Registrar Protocol came first

Before EPP, the dominant tool was the Registry Registrar Protocol, RRP, defined in RFC 2832 and used by the early shared-registry system for .com and .net. RRP worked, but it was narrow. It handled a limited object set and was tied closely to one registry’s model, which did not suit a world of competing registries and layered extensions.

EPP as the extensible replacement

The IETF developed EPP to be extensible by design, which is the first word in its name. Where RRP was fixed, EPP was built so that new object types and new data attach through a defined extension mechanism without breaking the base protocol. That flexibility is why registries running divergent rules, from legacy generic TLDs to new ones, all speak the same core language.

2000

The Registry Registrar Protocol, RRP, is documented in RFC 2832 for the shared-registry system. It is the narrow predecessor EPP was built to replace. Source: IETF RFC 2832.

2004

The IETF publishes the first EPP standard as RFC 3730, alongside the domain, host, and contact mappings, establishing the extensible model. Source: IETF datatracker.

2009

RFC 5730 supersedes RFC 3730 as the current base specification, and the EPP suite is designated internet standard STD 69. Source: IETF RFC 5730.

2021

RFC 9154 adds a secure authorization-information model for transfers, hardening how the EPP transfer code is set and used. Source: IETF RFC 9154.

2024 to 2026

Work on a RESTful successor, discussed by APNIC, AFNIC, and DENIC under the RPP name, explores a modern HTTP-based provisioning interface while EPP remains the deployed standard. Source: APNIC and AFNIC publications.

Figure 1. The EPP standardization arc, cited to the IETF RFC record and the regional registry community. EPP has been the deployed registry-registrar standard since the mid-2000s, with the suite formalized as STD 69.

The RFC family that defines EPP today

EPP is not a single document. The base protocol is RFC 5730, and three mapping RFCs define the objects it manages: RFC 5731 for domain names, RFC 5732 for hosts, and RFC 5733 for contacts. RFC 5734 specifies how EPP runs over TCP. Together they form internet standard STD 69, the stable reference every registry and registrar implements.

How EPP works: client, server, port 700, and XML over TLS

EPP is a client-server protocol. The registrar runs the client, the registry runs the server, and they exchange XML documents over a secure connection. RFC 5734 specifies that EPP runs over TCP, protected by TLS, on IANA-assigned port 700. A session opens with a login, carries a series of command and response pairs, and closes with a logout.

The client-server relationship

The registrar is always the client that initiates. It opens a connection to the registry server, authenticates, and then issues commands. The registry server validates each command against its policy, performs the action on its authoritative database, and returns a structured response with a result code. The buyer sits one step further out, dealing with the registrar, never with EPP directly.

XML messages over TLS on port 700

Every EPP message is an XML document. A command is XML, the response is XML, and the schema for each is defined in the RFCs. The transport is TCP secured with TLS, and IANA has assigned TCP port 700 to EPP, which is why network references list EPP as a port-700 service. The TLS layer means the provisioning channel is encrypted in transit, a baseline the standard requires.

The session model: login, commands, logout

An EPP exchange is stateful. The registrar opens with a login command carrying its credentials, the registry greets it and confirms the session, and from there the two sides trade command-response pairs until the registrar sends a logout. This session structure, defined in RFC 5730, is what lets a registrar run a batch of operations efficiently inside one authenticated connection.

The EPP command set, with an example exchange

RFC 5730 defines a compact command set grouped into session, query, and transform commands. Session commands open and close a connection. Query commands read state without changing it: check and info. Transform commands change state: create, update, delete, renew, and transfer. A poll command retrieves queued messages such as a pending transfer notice.

The commands, grouped by what they do

The whole protocol runs on roughly ten verbs. Knowing the group each falls into makes the behaviour predictable: query commands are safe reads, transform commands write to the registry, and session commands bracket the conversation.

CommandGroupWhat it does
login / logoutSessionOpen an authenticated session and close it
checkQueryTest whether one or more names are available to register
infoQueryRead the full record of an object, including its status codes
pollQueryRetrieve queued service messages, such as a pending-transfer notice
createTransformRegister a new domain, host, or contact object
updateTransformChange an object, including adding or removing status codes
renewTransformExtend a domain’s registration period
deleteTransformRemove an object, subject to registry policy and grace periods
transferTransformRequest, approve, reject, or cancel moving a domain between registrars
Figure 2. The EPP command set per RFC 5730, grouped into session, query, and transform commands. The transfer command is the one a buyer’s acquisition ultimately depends on.

An example EPP exchange

A real exchange is two XML documents: the registrar’s command and the registry’s response. The example below is a simplified domain check, the query a registrar runs to tell a buyer whether a name is free, with the structure that the RFC 5731 domain mapping defines.

<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.com</domain:name> </domain:check> </check> </command> </epp> Registry response (simplified): result code 1000 (command completed successfully) domain example.com avail=”0″ (not available, already registered)

The response carries a numeric result code. Code 1000 means the command completed successfully, and the data shows the name is taken. Result codes in the 1000 range signal success, the 2000 range signals errors, and the registry returns one for every command. The buyer sees only the registrar’s plain-language verdict, available or taken, while EPP did the asking.

EPP object mappings: domains, hosts, and contacts

EPP separates the protocol from the things it manages. The base RFC 5730 defines how commands work, while three object mappings define what they act on: domain names in RFC 5731, hosts, meaning nameservers, in RFC 5732, and contacts, meaning registrant and admin records, in RFC 5733. This separation is what makes EPP extensible.

Three object types, three RFCs

A domain registration is not one record but three linked objects. The domain object is the name itself. The host objects are the nameservers that answer DNS for it. The contact objects hold the people: registrant, administrative, technical, and billing roles. Each object type has its own mapping RFC that defines its fields and how the generic EPP commands apply to it.

Domain object (RFC 5731)

The registered name itself, with its registration period, status codes, linked hosts and contacts, and the authorization information used for transfers.

Host object (RFC 5732)

A nameserver record, holding the hostname and its IP addresses, which the domain object references to direct DNS resolution.

Contact object (RFC 5733)

A person or organization record for the registrant, admin, technical, and billing roles, linked to one or more domains.

The extension model

New data and new object types attach through defined extensions, registered with IANA, so registries add policy without changing the base protocol.

Figure 3. The EPP object model. The base protocol manages three object types through their mapping RFCs, and the extension mechanism lets registries add fields without breaking interoperability.

Extensions: how registries add their own rules

Extensibility is more than a name. IANA maintains a registry of EPP extensions, the formal list of approved additions, which lets a registry layer in its own requirements, from registration data policy to launch-phase rules for a new TLD, while staying compatible with every registrar’s base implementation. A registrar that speaks core EPP can connect to a new registry and add only that registry’s extensions.

EPP status codes: what locks and unlocks a domain

EPP status codes are the labels on a domain that say what can and cannot be done to it. They come in two families: client codes set by the registrar and server codes set by the registry. A buyer reads them to know whether a name is locked, in a grace period, pending deletion, or free to transfer. ICANN documents the codes a registrant is likely to encounter.

Client codes versus server codes

According to ICANN’s published reference on EPP status codes, codes prefixed with client are set by the domain’s registrar, and codes prefixed with server are set by the registry. A registrar can apply and lift a client code itself. A server code is held at the registry and overrides the registrar, applied during disputes or for protected names. The prefix tells a buyer who has the power to change it.

The status codes that matter when acquiring a domain

For someone buying or transferring a name, a handful of codes decide whether the deal can proceed. The table below lists the ones that govern transferability and lifecycle, grounded in ICANN’s status-code documentation and the RFC 5731 domain mapping.

Status codeSet byWhat it means for a buyer
okDefaultNo restrictions are applied. The standard, unlocked state of a name with nothing pending.
clientTransferProhibitedRegistrarThe registrar lock that blocks a transfer. It must be lifted before a domain can move to a new registrar.
serverTransferProhibitedRegistryA registry-level transfer block the registrar cannot remove. Common on protected or disputed names.
clientHold / serverHoldRegistrar / RegistryThe name is removed from DNS and will not resolve. A signal something is wrong or unpaid.
pendingTransferRegistryA transfer is in progress. The losing registrar has a window to approve or reject it.
pendingDeleteRegistryThe name is scheduled for deletion and is heading toward the drop. Relevant to expired-domain buyers.
redemptionPeriodRegistryThe name has expired and sits in a recovery window before deletion, restorable by the prior registrant.
Figure 4. Key EPP status codes mapped to buyer impact, grounded in ICANN’s EPP status-code documentation and RFC 5731. The transfer-prohibited and lifecycle codes are the ones an acquisition turns on.

These lifecycle codes connect directly to how an expired name moves toward becoming available. The pendingDelete and redemptionPeriod states are stages in the drop, a sequence covered in the expired domain fundamentals hub. Reading a name’s EPP status is the difference between a transfer that completes and one that stalls.

EPP the protocol vs the EPP code: the transfer authorization string

The pair this topic confuses above all others is EPP the protocol and the EPP code. They are not the same thing. EPP is the registrar-registry language. The EPP code, also called the authorization code, auth code, or auth-info, is a secret string tied to one domain that proves the right to transfer it. The code is a value exchanged through the protocol, not the protocol itself.

EPP the protocol

The Extensible Provisioning Protocol: the XML-over-TLS standard, defined in RFC 5730, that registrars and registries use to provision and manage all domains. A system, not a value.

The EPP code (auth code)

A per-domain secret string, the authorization information, that a buyer supplies to a new registrar to authorize a transfer. One password for one name, carried inside an EPP transfer request.

Figure 5. The disambiguation the whole query carries. The EPP code is a value moved by the EPP protocol, the way a password is data sent over a login system. Conflating the two is the leading error in this topic.

Why registrars call the auth code an EPP code

The authorization code is set on the domain object and transmitted in EPP transfer messages, which is why registrars label it the EPP code in their control panels. The name is shorthand for where the value lives. RFC 5731 defines the authInfo element on the domain object, and RFC 9154 later hardened how that authorization information is generated and used, so the secret is short-lived and unguessable instead of a static field.

How an inter-registrar transfer runs over EPP, step by step

A transfer is a defined EPP sequence. The losing registrar unlocks the name and releases the auth code, the buyer gives that code to the gaining registrar, and the gaining registrar sends an EPP transfer request carrying the code. The registry validates it, sets the pendingTransfer status, and the move completes after the losing registrar approves or a timeout passes. The step-by-step buyer view of that string is detailed in EPP code (auth code) explained, and the registrar-by-registrar differences in Registrar transfer policies compared.

The future: secure authorization, RESTful EPP, and RPP

EPP is stable but not frozen. RFC 9154, published in 2021, introduced a secure authorization-information model that makes the transfer code short-lived and harder to abuse. Separately, the registry community, through APNIC, AFNIC, and DENIC, is exploring a RESTful successor under the RPP name, a modern HTTP-based provisioning interface, while EPP remains the deployed worldwide standard.

RFC 9154 and secure transfer authorization

The original authorization model let a registrar set a static auth code that would sit unchanged for a domain’s life. RFC 9154 changed that, defining a secure model where the authorization information is set on demand, has a limited lifetime, and is not stored long term in plain form. For a buyer, this is why a registrar increasingly generates a fresh EPP code at transfer time instead of displaying a permanent one.

RESTful EPP and the RPP proposal

EPP predates the modern web-API era, and its XML-over-a-raw-TCP-session model is heavier than today’s HTTP interfaces. APNIC has published on a RESTful EPP direction, and AFNIC and DENIC have written about a Registration Provisioning Protocol, RPP, that would carry the same provisioning logic over REST. As of 2026 this is forward-looking standards work, not a replacement: EPP is what every registry and registrar runs in production.

EPP protocol frequently asked questions

The questions buyers and SEOs raise when they search for what the EPP protocol is, answered against the IETF standards and ICANN’s documentation.

Q1What does EPP stand for?

EPP stands for Extensible Provisioning Protocol. Extensible because new object types and data can be added through a defined extension mechanism. Provisioning because it manages the registration and lifecycle of domains. Protocol because it is a defined standard for how a registrar and a registry communicate, specified by the IETF in RFC 5730.

Q2Is the EPP code the same as the EPP protocol?

No, and this is the key distinction. The EPP protocol is the XML-based registrar-registry language defined in RFC 5730. The EPP code, also called the auth code or authorization code, is a per-domain secret string that authorizes a transfer. The code is a value carried inside an EPP transfer message. Registrars call it an EPP code because it travels on the EPP system, but the protocol and the code are different things.

Q3Is EPP an API?

EPP functions as a machine-to-machine interface, so it serves the same purpose as an API, but it predates modern REST conventions. It uses XML documents exchanged over a stateful TLS connection on port 700 instead of HTTP requests. The RPP and RESTful EPP work discussed by the registry community would bring provisioning closer to a conventional web API, but EPP itself is the older standard.

Q4What port does EPP use?

EPP uses TCP port 700, assigned by IANA, secured with TLS as specified in RFC 5734. The registrar acts as the client connecting to the registry server on that port. Buyers never connect to port 700 themselves, since they deal with the registrar’s front end, not the underlying provisioning channel.

Q5How do EPP status codes affect buying a domain?

EPP status codes tell a buyer whether a name can be transferred or is locked. A clientTransferProhibited code is a registrar lock that must be lifted before a move. A serverTransferProhibited code is a registry lock the registrar cannot remove. Lifecycle codes such as pendingDelete and redemptionPeriod show an expired name’s stage toward the drop. Reading these codes before a purchase prevents a stalled or impossible transfer.

EPP at the point of acquisition: transfers, locks, and the right domain

Every domain acquisition runs on EPP. The transfer command moves a name, the auth code authorizes it, and the status codes decide whether the move is even allowed. Understanding the protocol turns a buyer from someone hoping a transfer completes into someone who reads the signals. SEO Domains operates the curated marketplace where aged and expired domains are sourced and transferred through exactly this mechanism.

Why EPP is the mechanism behind every transfer

When a name moves from a seller to a buyer, nothing happens by hand. The losing registrar releases the EPP auth code and clears the clientTransferProhibited lock, the gaining registrar sends an EPP transfer request carrying that code, and the registry validates and completes it. The buyer’s experience is three or four clicks, but underneath, EPP is doing the work. Knowing that is knowing what to check before, during, and after a purchase.

What to check before acquiring a name

A clean acquisition reads the EPP signals first. The points below are the protocol-level checks that decide whether a transfer will complete smoothly:

  • The status codes: the name should not carry serverTransferProhibited or a hold, and the registrar lock must be liftable.
  • The auth code: a valid, current EPP code must be available, increasingly generated fresh at transfer time under RFC 9154.
  • The lifecycle stage: for an expired name, the EPP status shows whether it is still in redemption, in pendingDelete, or fully available.
  • The registry and registrar policy: transfer windows and grace periods differ, which is why provenance matters before money changes hands.

A name that passes these checks transfers cleanly. A name with a hidden server lock or a stale code stalls. Sourcing from inventory where the registration state has already been read removes that friction, which is the practical value of a screened catalogue over an unchecked drop list.

Source domains that transfer cleanly

The legitimate demand behind every EPP search is a name that lands in your account without friction. That is the product. SEO Domains operates the curated marketplace where aged and expired domains are screened across their backlink profiles, authority metrics, and registration state before they are listed, so the EPP transfer at the end is the easy part. Browse vetted aged and expired domains on the SEO Domains marketplace, sourced and transferred through the same registrar-registry protocol this guide explains.

Damyan Zagorski, Chief Commercial Officer at SEO Domains

Damyan Zagorski

Chief Commercial Officer @ SEO Domains

Damyan leads commercial strategy at SEO Domains, drawing on experience as a CEO and marketing director. He has driven the company’s branding, client growth, and revenue, helping establish it as a leading provider of aged domains for SEO.

He leads SEO at the SEO Domains marketplace, which operates a 220,000+ curated catalogue from $100 entry-level domains through premium acquisitions, screened across the catalogue, with ICANN-accredited transfer on every name.

· Last reviewed