A Python SDK for accessing UK Companies House API
Project description
UK Companies SDK
A modern Python SDK for accessing the UK Companies House API.
Features
- Async-first: Built with modern async/await patterns for optimal performance
- Type-safe: Full type hints and Pydantic models for data validation
- Developer-friendly: Intuitive API with comprehensive documentation
- Lightweight: Minimal dependencies, fast installation
- Well-tested: Extensive test coverage with unit and integration tests
- Automatic Retry: Smart retry logic with exponential backoff for rate-limited requests
- Rate Limit Aware: Intelligent handling of API rate limits with configurable retry strategies
- Production Ready: Published on PyPI, thoroughly tested with live API
Installation
# Install from PyPI
pip install ukcompanies
# Or with uv
uv add ukcompanies
Quick Start
import asyncio
from ukcompanies import AsyncClient
async def main():
# Initialize the client with your API key
async with AsyncClient(api_key="your-api-key") as client:
# Search for companies
results = await client.search_companies("OpenAI")
for company in results.items:
print(f"{company.title} - {company.company_number}")
# Get detailed company information
company = await client.profile("12345678")
print(f"Company: {company.company_name}")
print(f"Status: {company.company_status}")
asyncio.run(main())
Configuration
API Key
You'll need an API key from Companies House. Get one by:
- Registering at Companies House Developer Hub
- Creating an application
- Getting your API key
Environment Variables
Create a .env file in your project root:
COMPANIES_HOUSE_API_KEY=your-api-key-here
Advanced Configuration
Retry Settings
The SDK automatically handles rate limits with intelligent retry logic. You can customize retry behavior:
from ukcompanies import AsyncClient
# Custom retry configuration
async with AsyncClient(
api_key="your-api-key",
auto_retry=True, # Enable automatic retry (default: True)
max_retries=5, # Maximum retry attempts (default: 3)
backoff="exponential", # Backoff strategy: "exponential" or "fixed" (default: "exponential")
base_delay=1.0, # Base delay in seconds (default: 1.0)
max_delay=60.0, # Maximum delay between retries (default: 60.0)
jitter_range=1.0, # Random jitter range (default: 1.0)
on_retry=my_callback # Optional callback for retry events
) as client:
# Use client here
pass
# Custom retry callback
async def my_retry_callback(attempt, delay, response):
print(f"Retry attempt {attempt} after {delay}s delay")
async with AsyncClient(
api_key="your-api-key",
on_retry=my_retry_callback
) as client:
# Use client here
pass
The SDK respects X-Ratelimit-Reset headers from the API for intelligent wait times and uses exponential backoff with jitter to prevent thundering herd problems.
Development
Setup
This project uses uv for dependency management:
# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install dependencies
uv pip install -e ".[dev]"
Testing
# Run tests
pytest
# Run tests with coverage
pytest --cov=ukcompanies
# Run type checking
mypy src/ukcompanies
# Run linting
ruff check src/ tests/
# Format code
ruff format src/ tests/
Documentation
Documentation is built with MkDocs:
# Install documentation dependencies
uv pip install -e ".[docs]"
# Serve documentation locally
mkdocs serve
# Build documentation
mkdocs build
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Links
Project details
Release history Release notifications | RSS feed
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 ukcompanies-0.6.1.tar.gz.
File metadata
- Download URL: ukcompanies-0.6.1.tar.gz
- Upload date:
- Size: 1.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc9e2509a27ed3eac16c09c1ef07f87cc0eeea375076d89e07c6821a62ae4726
|
|
| MD5 |
56bb9b9438eb068ae61833c45e069fc0
|
|
| BLAKE2b-256 |
fe809a733e856aeec0dac1a163cdd0db3bea85db362c58552ad0563bf1c0b129
|
File details
Details for the file ukcompanies-0.6.1-py3-none-any.whl.
File metadata
- Download URL: ukcompanies-0.6.1-py3-none-any.whl
- Upload date:
- Size: 34.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d337070fa7e19da0c44cba5ab2de2738c89af75d6038b77a089803f6ce3cfe25
|
|
| MD5 |
4d4d2086283cdedbcb33f8455c4d6b89
|
|
| BLAKE2b-256 |
3e102fa7fe6b3455783f6369ec0ceab5d186d058c19dfa511b06a5e41507f344
|