Skip to content

💰 Pricing

Domain TLD pricing information. This API does not require authentication.

🚀 Quick Example

from oinker.pricing import get_pricing

# Get pricing for all TLDs
pricing = await get_pricing()

# Check .com pricing
com = pricing["com"]
print(f".com registration: ${com.registration}")
print(f".com renewal: ${com.renewal}")
print(f".com transfer: ${com.transfer}")

# Find cheapest TLDs
sorted_by_price = sorted(
    pricing.values(),
    key=lambda p: float(p.registration)
)
for tld in sorted_by_price[:5]:
    print(f".{tld.tld}: ${tld.registration}")
from oinker.pricing import get_pricing_sync

# Get pricing for all TLDs
pricing = get_pricing_sync()

# Check .com pricing
com = pricing["com"]
print(f".com registration: ${com.registration}")
print(f".com renewal: ${com.renewal}")
print(f".com transfer: ${com.transfer}")

Functions

get_pricing

oinker.pricing.get_pricing async

get_pricing(
    request_timeout: float = DEFAULT_TIMEOUT,
) -> dict[str, TLDPricing]

Get default domain pricing for all supported TLDs.

This endpoint does not require authentication.

Parameters:

Name Type Description Default
request_timeout float

Request timeout in seconds (default 30).

DEFAULT_TIMEOUT

Returns:

Type Description
dict[str, TLDPricing]

Dictionary mapping TLD names to their pricing information.

Raises:

Type Description
APIError

If the request fails.

Example

pricing = await get_pricing() print(pricing["com"].registration) "9.68"

Source code in src/oinker/pricing/_api.py
async def get_pricing(
    request_timeout: float = DEFAULT_TIMEOUT,
) -> dict[str, TLDPricing]:
    """Get default domain pricing for all supported TLDs.

    This endpoint does not require authentication.

    Args:
        request_timeout: Request timeout in seconds (default 30).

    Returns:
        Dictionary mapping TLD names to their pricing information.

    Raises:
        APIError: If the request fails.

    Example:
        >>> pricing = await get_pricing()
        >>> print(pricing["com"].registration)
        "9.68"
    """
    async with httpx.AsyncClient(timeout=request_timeout) as client:
        try:
            response = await client.post(PRICING_URL)
        except (httpx.ConnectError, httpx.TimeoutException) as e:
            msg = f"Failed to connect to pricing API: {e}"
            raise APIError(msg) from e

        try:
            data: dict[str, Any] = response.json()
        except ValueError as e:
            msg = f"Invalid JSON response: {response.text[:200]}"
            raise APIError(msg, status_code=response.status_code) from e

        status = data.get("status", "")
        if status.upper() != "SUCCESS":
            message = data.get("message", "Unknown error")
            raise APIError(message, status_code=response.status_code)

        pricing_data = data.get("pricing", {})
        return {
            tld: TLDPricing.from_api_response(tld, tld_data)
            for tld, tld_data in pricing_data.items()
        }

get_pricing_sync

oinker.pricing.get_pricing_sync

get_pricing_sync(
    request_timeout: float = DEFAULT_TIMEOUT,
) -> dict[str, TLDPricing]

Get default domain pricing for all supported TLDs (synchronous version).

This endpoint does not require authentication.

Parameters:

Name Type Description Default
request_timeout float

Request timeout in seconds (default 30).

DEFAULT_TIMEOUT

Returns:

Type Description
dict[str, TLDPricing]

Dictionary mapping TLD names to their pricing information.

Raises:

Type Description
APIError

If the request fails.

Example

pricing = get_pricing_sync() print(pricing["com"].registration) "9.68"

Source code in src/oinker/pricing/_api.py
def get_pricing_sync(request_timeout: float = DEFAULT_TIMEOUT) -> dict[str, TLDPricing]:
    """Get default domain pricing for all supported TLDs (synchronous version).

    This endpoint does not require authentication.

    Args:
        request_timeout: Request timeout in seconds (default 30).

    Returns:
        Dictionary mapping TLD names to their pricing information.

    Raises:
        APIError: If the request fails.

    Example:
        >>> pricing = get_pricing_sync()
        >>> print(pricing["com"].registration)
        "9.68"
    """
    loop = asyncio.new_event_loop()
    try:
        return loop.run_until_complete(get_pricing(request_timeout))
    finally:
        loop.close()

Types

TLDPricing

oinker.pricing.TLDPricing dataclass

TLDPricing(
    tld: str, registration: str, renewal: str, transfer: str
)

Pricing information for a top-level domain.

Attributes:

Name Type Description
tld str

The top-level domain (e.g., "com", "net", "org").

registration str

Registration price as a string (e.g., "9.68").

renewal str

Renewal price as a string.

transfer str

Transfer price as a string.

from_api_response classmethod

from_api_response(
    tld: str, data: dict[str, Any]
) -> TLDPricing

Create from API response data.

Parameters:

Name Type Description Default
tld str

The top-level domain name.

required
data dict[str, Any]

The pricing data dictionary for this TLD.

required

Returns:

Type Description
TLDPricing

A TLDPricing instance.

Source code in src/oinker/pricing/_types.py
@classmethod
def from_api_response(cls, tld: str, data: dict[str, Any]) -> TLDPricing:
    """Create from API response data.

    Args:
        tld: The top-level domain name.
        data: The pricing data dictionary for this TLD.

    Returns:
        A TLDPricing instance.
    """
    return cls(
        tld=tld,
        registration=data.get("registration", ""),
        renewal=data.get("renewal", ""),
        transfer=data.get("transfer", ""),
    )