Python SDK for the RDAP API — look up domains, IPs, ASNs, nameservers, and entities.
Project description
RDAP API Python SDK
Official Python SDK for the RDAP API — look up domains, IP addresses, ASNs, nameservers, and entities via the RDAP protocol.
Installation
pip install rdapapi
Quick start
from rdapapi import RdapApi
api = RdapApi("your-api-key")
# Domain lookup
domain = api.domain("google.com")
print(domain.registrar.name) # "MarkMonitor Inc."
print(domain.dates.expires) # "2028-09-14T04:00:00Z"
print(domain.nameservers) # ["ns1.google.com", ...]
# IP address lookup
ip = api.ip("8.8.8.8")
print(ip.name) # "GOGL"
print(ip.cidr) # ["8.8.8.0/24"]
# ASN lookup
asn = api.asn(15169)
print(asn.name) # "GOOGLE"
# Nameserver lookup
ns = api.nameserver("ns1.google.com")
print(ns.ip_addresses.v4) # ["216.239.32.10"]
# Entity lookup
entity = api.entity("GOGL")
print(entity.name) # "Google LLC"
print(entity.autnums[0].handle) # "AS15169"
api.close()
Registrar follow-through
For thin registries like .com and .net, the registry only returns basic registrar info. Use follow=True to follow the registrar's RDAP link and get richer contact data:
domain = api.domain("google.com", follow=True)
print(domain.entities.registrant.organization) # "Google LLC"
print(domain.entities.registrant.email) # "registrant@google.com"
Error handling
from rdapapi import RdapApi, NotFoundError, RateLimitError, AuthenticationError
api = RdapApi("your-api-key")
try:
domain = api.domain("nonexistent.example")
except NotFoundError:
print("Domain not found")
except RateLimitError as e:
print(f"Rate limited. Retry after {e.retry_after}s")
except AuthenticationError:
print("Invalid API key")
All exceptions inherit from RdapApiError and include status_code, error, and message attributes.
| Exception | HTTP Status | When |
|---|---|---|
ValidationError |
400 | Invalid input format |
AuthenticationError |
401 | Missing or invalid API key |
SubscriptionRequiredError |
403 | No active subscription |
NotFoundError |
404 | No RDAP data found |
RateLimitError |
429 | Rate limit or quota exceeded |
UpstreamError |
502 | Upstream RDAP server error |
Async support
import asyncio
from rdapapi import AsyncRdapApi
async def main():
async with AsyncRdapApi("your-api-key") as api:
domain, ip, asn = await asyncio.gather(
api.domain("google.com"),
api.ip("8.8.8.8"),
api.asn(15169),
)
print(f"{domain.domain}: {domain.registrar.name}")
asyncio.run(main())
Serialization
All response objects are Pydantic models with full type hints:
domain = api.domain("google.com")
# Convert to dict
data = domain.model_dump()
# Convert to JSON string
json_str = domain.model_dump_json()
Configuration
api = RdapApi(
"your-api-key",
base_url="https://rdapapi.io/api/v1", # default
timeout=30, # seconds, default
)
Links
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rdapapi-0.1.0.tar.gz.
File metadata
- Download URL: rdapapi-0.1.0.tar.gz
- Upload date:
- Size: 11.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9238666d34a7a45199c67c8e103a1c832e18f4fff305533c8507047245ccc47c
|
|
| MD5 |
346369cdb2c31a0229c8282b2254ceb4
|
|
| BLAKE2b-256 |
5eb2912d1894fcf7bed3f1be234ca8f9abbef6e809793253830470da3a7a956b
|
Provenance
The following attestation bundles were made for rdapapi-0.1.0.tar.gz:
Publisher:
publish.yml on rdapapi/python-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rdapapi-0.1.0.tar.gz -
Subject digest:
9238666d34a7a45199c67c8e103a1c832e18f4fff305533c8507047245ccc47c - Sigstore transparency entry: 986142177
- Sigstore integration time:
-
Permalink:
rdapapi/python-sdk@0234a70580824931c89a15b8a820b5defb579338 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/rdapapi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0234a70580824931c89a15b8a820b5defb579338 -
Trigger Event:
release
-
Statement type:
File details
Details for the file rdapapi-0.1.0-py3-none-any.whl.
File metadata
- Download URL: rdapapi-0.1.0-py3-none-any.whl
- Upload date:
- Size: 8.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78bebbd86f87d746000678df32bda1d04d4432c3f765d0f5e3a0aa781e53e880
|
|
| MD5 |
ff05e6667b2e68c4d81f13a9f842087c
|
|
| BLAKE2b-256 |
5d824706688c8f0525c100eea064cc3e4fc0ef44e6dc79644a55dba8c08574bd
|
Provenance
The following attestation bundles were made for rdapapi-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on rdapapi/python-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rdapapi-0.1.0-py3-none-any.whl -
Subject digest:
78bebbd86f87d746000678df32bda1d04d4432c3f765d0f5e3a0aa781e53e880 - Sigstore transparency entry: 986142184
- Sigstore integration time:
-
Permalink:
rdapapi/python-sdk@0234a70580824931c89a15b8a820b5defb579338 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/rdapapi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0234a70580824931c89a15b8a820b5defb579338 -
Trigger Event:
release
-
Statement type: