py-rpp is a Python-based RPP (RESTful Provisioning Protocol) to EPP (Extensible Provisioning Protocol) adapter intended for RPP-EPP compatibility testing. It converts RPP requests to EPP requests, and transforms EPP responses back into RPP responses. This allows systems using RPP to communicate seamlessly with EPP-based registries.
Currently, py-rpp is tightly bound to the EPP data model. In future versions, this will change as we begin developing a dedicated RPP data model. This will improve flexibility and better reflect the RPP protocol
SWAGGER UI: The API is documented using Swagger, the interactive documentation is available on Github Pages but there is no server running, so the endpoints are not functional.
You can run easily using Docker. Once running, you can use the RPP API by sending HTTP requests to the server (see the OpenAPI docs at /docs
).
Note:
- The API requires HTTP Basic Auth to log in, use your EPP server credentials.
- Configure the connection details for your backend EPP server in the
config.yaml
file before
Example:
This example uses Curl, but any HTTP client can be used to interact with the RPP API. Make sure to replace <username>
and <password>
with your actual EPP credentials and make sure the contacts used in the request exist in the EPP server:
Request to create a new domain using RPP:
curl -X POST "http://localhost:8000/domains/" \
-u "<username>:<password>" \
-H "Content-Type: application/json" \
-d '{
"name": "test-domain-mw-123.nl",
"authInfo": {
"value": "XYZ12345"
},
"registrant": "MAK005714-X2627",
"contact": [
{
"type": "admin",
"value": "MAK005713-X2627"
},
{
"type": "tech",
"value": "MAK005712-X2627"
}
]
}'
Response:
{
"@type": "Domain",
"result": [
{
"code": 1000,
"message": "The domain name has been registered.",
"lang": "en"
}
],
"trID": {
"clTRID": "trfefd043199558da0",
"svTRID": "48554516"
},
"resData": {
"name": "test-domain-mw-123.nl",
"creDate": "2025-07-08T13:41:16Z"
}
}
See the OpenAPI documentation for a complete list of available endpoints, requires server running on localhost.
See the OpenAPI JSON schema for the API specification, requires server running on localhost.
You can build and run the RPP server using the provided Dockerfile
and docker-compose.yaml
.
From the project root directory, run:
docker build -t py-rpp:latest .
Start the container using Docker Compose (the container will be built automatically if it doesn't exist yet):
docker-compose up
See the examples
directory for example requests. You can use tools like curl
or Postman to test the API endpoints.
This will build (if needed) and start the py-rpp
container, exposing the server on port 8000 (as configured in docker-compose.yaml
).
The container uses /app/config.yaml
for configuration, which is mounted from your local directory.
You can set environment variables in the docker-compose.yaml
file or by editing config.yaml
.
The rpp_epp_host
variable should point to the EPP server you want to connect to.
To stop the server, press Ctrl+C
or run:
docker-compose down
To set up a development environment for py-rpp, follow these steps:
- Clone the repository:
git clone https://github.com/SIDN/py-rpp.git
cd py-rpp
- Create a virtual environment:
python3 -m venv .venv
- Activate the virtual environment:
. ./.venv/bin/activate
- Install the required dependencies:
pip install -r requirements.txt
-
Create a configuration file:
config.yaml
, aconfig.yaml.example
is provided as a template. -
Edit
config.yaml
to set the connection details for your EPP server. -
Start the server using FastAPI's development server:
fastapi dev main.py
- The server will be available at
http://localhost:8000
. You can access the OpenAPI documentation athttp://localhost:8000/docs
.