Skip to main content

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:

  1. Registering at Companies House Developer Hub
  2. Creating an application
  3. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ukcompanies-0.7.0.tar.gz (1.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ukcompanies-0.7.0-py3-none-any.whl (37.0 kB view details)

Uploaded Python 3

File details

Details for the file ukcompanies-0.7.0.tar.gz.

File metadata

  • Download URL: ukcompanies-0.7.0.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for ukcompanies-0.7.0.tar.gz
Algorithm Hash digest
SHA256 d20a221e96f5e01a54aa7b6c874eaca477bd141523361dce15ad309d510c1359
MD5 602a56da20964a15a702a197540168e1
BLAKE2b-256 71f87c68aa30d9697e1d27b57e1a17b4f0050d76721ab6ebca27db4f8bd33fe7

See more details on using hashes here.

File details

Details for the file ukcompanies-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: ukcompanies-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 37.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for ukcompanies-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1c643fd97148244d295370662ecb3c51e3c5de9b1dd93cb035d588752bffb1e9
MD5 866906f74dc8df75f279735158eda175
BLAKE2b-256 6f91a15cfe6f6d756ca2ee77d02fb578438837c3e035b235ab4b4ad9c5f33fe2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page