Change Poll Extension for the Extensible Provisioning Protocol (EPP)
Extracted elements (24)
The <changePoll:who> element is explicitly described as a free-form audit field not intended to drive client-side logic. This design choice acknowledges that the identifier scheme is server-policy-dependent and prevents clients from incorrectly relying on its format for automation.
The extension only extends the EPP <poll> response and does not extend the EPP <poll> command. This design allows clients to receive server-initiated change notifications via the existing poll mechanism without requiring changes to client-side command processing.
The extension supports both 'before' and 'after' state poll messages for a single operation, using separate poll messages for each state. This allows sponsoring clients to reconstruct exactly what changed on their objects without requiring direct participation in the operation.
The 'restore' operation references RFC 3915 (Domain Registry Grace Period Mapping) and MUST set the 'op' attribute to either 'request' or 'report'. Implementations must be aware of this dependency on the grace period extension for restore sub-operation semantics.
This extension only applies to the EPP <poll> response and does not add elements to any EPP command (<check>, <info>, <transfer>, <create>, <delete>, <renew>, <update>). Clients need not modify their command handling to support this extension.
Date and time values MUST be represented in UTC using the Gregorian calendar, using the extended date-time form with uppercase 'T' and 'Z' characters as defined in XML Schema Part 2. Truncated date-time forms and lowercase 'T'/'Z' are not permitted.
For operations that have no 'after' state (e.g., 'delete' with op='purge', 'autoPurge'), the server MUST use the 'before' state poll message, including the object's state prior to the operation.
For operations that have no 'before' state (e.g., 'create'), the server MUST use the 'after' state poll message, including the object's state after the operation.
For the 'custom' operation, the 'op' attribute MUST be set with the custom operation name. The supported custom operations are up to server policy.
For the 'transfer' operation, the 'op' attribute MUST be set to one of: 'request', 'approve', 'cancel', or 'reject'.
If the 'delete' operation results in an immediate purge of the object, then the 'op' attribute MUST be set to 'purge'. The same requirement applies to the 'autoDelete' operation.
Implementations MUST NOT depend on the 'changePoll' XML namespace prefix; instead they MUST employ a proper namespace-aware XML parser and serializer to interpret and output XML documents.
When both 'before' and 'after' state poll messages are generated for an operation, the 'before' state poll message MUST be inserted into the message queue prior to the 'after' state poll message.
XML specifications and examples provided in this document MUST be interpreted in the character case presented in order to develop a conforming implementation, because XML is case sensitive.
The <changePoll:caseId> element is an optional case identifier associated with the operation. Its required 'type' attribute is one of 'udrp', 'urs', or 'custom'; a 'name' attribute further qualifies custom case types using 7-bit US-ASCII.
The <changePoll:changeData> element is the root extension element carrying operation detail in EPP poll responses. It contains child elements: <changePoll:operation>, <changePoll:date>, <changePoll:svTRID>, <changePoll:who>, optional <changePoll:caseId>, and optional <changePoll:reason>, plus a 'state' attribute defaulting to 'after'.
The <changePoll:operation> element defines the transform operation type. It supports an enumerated set of values (create, delete, renew, transfer, update, restore, autoRenew, autoDelete, autoPurge, custom) and an optional 'op' attribute for sub-operations or custom operation names.
The <changePoll:reason> element is an optional free-text explanation for the operation. It MUST be in the language previously negotiated with the client, with an optional 'lang' attribute to identify a non-English language.
The <changePoll:who> element identifies who executed the operation for audit purposes. It is a free-form string (1–255 characters of normalizedString) representing an identifier, name, or role; its value scheme is up to server policy and is not intended to drive client-side logic.
RFC 8590 registers the 'Change Poll Extension for the Extensible Provisioning Protocol (EPP)' in the EPP Extension Registry (RFC 7451) as a Standards Track extension applicable to any TLD, with Active status.
RFC 8590 registers the XML namespace 'urn:ietf:params:xml:ns:changePoll-1.0' in the IETF XML Registry (RFC 3688) with IESG as registrant contact.
The changePoll extension does not provide any security services beyond those described by EPP (RFC 5730) and the protocol layers used by EPP. All security considerations from those specifications apply to this extension as well.
The changeDataType XML complex type defines the wire structure: a sequence of operation (operationType), date (dateTime), svTRID (epp:trIDStringType), who (whoType, 1–255 char normalizedString), optional caseId (caseIdType), and optional reason (eppcom:reasonType), plus a 'state' attribute of stateType defaulting to 'after'.
The operationType extends operationEnum (token-restricted enumeration) with an optional 'op' attribute of type token for sub-operations. The caseIdType extends token with a required 'type' attribute (caseTypeEnum: udrp, urs, custom) and optional 'name' attribute of type token.