Python Guide

All examples use httpx for HTTP requests. Install it with:

pip install httpx

Basic Request

import httpx

API_KEY = "YOUR_KEY"
BASE = "https://dns.toolkitapi.io/v1"

response = httpx.post(
    f"{BASE}/lookup",
    headers={"X-API-Key": API_KEY},
    params={"domain": "toolkitapi.io", "type": "A"},
)
response.raise_for_status()
data = response.json()
print(data)

Reusable Client

For multiple requests, use a persistent client to benefit from connection pooling:

import httpx

client = httpx.Client(
    base_url="https://dns.toolkitapi.io/v1",
    headers={"X-API-Key": "YOUR_KEY"},
    timeout=30.0,
)

# DNS lookup
dns = client.get("/lookup", params={"domain": "toolkitapi.io", "type": "A"}).json()

# WHOIS
whois = client.get("/whois", params={"domain": "toolkitapi.io"}).json()

client.close()

Async Requests

import httpx
import asyncio

async def lookup(domain: str) -> dict:
    async with httpx.AsyncClient(
        base_url="https://dns.toolkitapi.io/v1",
        headers={"X-API-Key": "YOUR_KEY"},
    ) as client:
        r = await client.get("/lookup", params={"domain": domain, "type": "A"})
        r.raise_for_status()
        return r.json()

result = asyncio.run(lookup("toolkitapi.io"))

Error Handling

import httpx

try:
    r = httpx.get(
        "https://dns.toolkitapi.io/v1/lookup",
        headers={"X-API-Key": "YOUR_KEY"},
        params={"domain": "toolkitapi.io", "type": "A"},
    )
    r.raise_for_status()
except httpx.HTTPStatusError as e:
    error_detail = e.response.json().get("detail", "Unknown error")
    print(f"API error {e.response.status_code}: {error_detail}")
except httpx.RequestError as e:
    print(f"Connection error: {e}")

File Uploads (Image/PDF)

import httpx

with open("photo.png", "rb") as f:
    r = httpx.post(
        "https://image.toolkitapi.io/v1/image/convert",
        headers={"X-API-Key": "YOUR_KEY"},
        files={"file": ("photo.png", f, "image/png")},
        data={"format": "webp", "quality": "85"},
    )

with open("photo.webp", "wb") as out:
    out.write(r.content)