Skip to main content

Python client library for the UK Financial Services (FCA) Register RESTful API

Project description

fca-api

CI CodeQL License: MPL 2.0 PyPI version

An async Python client for the UK Financial Conduct Authority's Financial Services Register RESTful API.

Covers firms, individuals, funds, permissions, disciplinary history, and regulated markets, with Pydantic-typed responses and cursor-based pagination.

Requirements

  • Python 3.11+
  • httpx, pydantic

Installation

pip install fca-api

Quick Start

import asyncio
import fca_api

async def main():
    async with fca_api.async_api.Client(
        credentials=("your.email@example.com", "your_api_key")
    ) as client:
        page = await client.search_frn("Barclays")
        for firm in page.data:
            print(f"{firm.name} (FRN: {firm.frn}) — {firm.status}")

        if page.data:
            details = await client.get_firm(page.data[0].frn)
            print(details.name, details.status, details.effective_date)

if __name__ == "__main__":
    asyncio.run(main())

Two clients

  • fca_api.async_api.Client — Pydantic-typed responses, cursor pagination, the default choice.
  • fca_api.raw_api.RawClient — thin wrapper around the HTTP endpoints; raw JSON in, raw JSON out.

Usage Examples

Pagination

async with fca_api.async_api.Client(credentials=("email", "key")) as client:
    page = await client.search_frn("revolution")
    while True:
        for firm in page.data:
            print(f"{firm.name}{firm.status}")
        if not page.pagination.has_next:
            break
        page = await client.fetch_next_page(page.pagination.next_page)

    # Or collect at least N items in one call:
    page = await client.search_frn("revolution", result_count=100)

The next_page token is self-contained — it embeds the endpoint and arguments, so a separate process can resume with only the token in hand. See PageTokenSerializer if you want to sign or encrypt tokens crossing a trust boundary.

Firm information

firm = await client.get_firm("123456")
print(firm.name, firm.status)

addresses = await client.get_firm_addresses("123456")
for address in addresses.data:
    print(", ".join(address.address_lines))

Individual and fund searches

people = await client.search_irn("John Smith")
for person in people.data:
    print(f"{person.name} (IRN: {person.irn})")

funds = await client.search_prn("Vanguard")
for fund in funds.data:
    print(f"{fund.name} (PRN: {fund.prn})")

Error handling

import fca_api.exc

try:
    firm = await client.get_firm("invalid_frn")
except fca_api.exc.FcaRequestError as e:
    print(f"API request failed: {e}")

Rate limiting

Pass any async context manager factory as api_limiter; the client enters it around each request.

from asyncio_throttle import Throttler

async with fca_api.async_api.Client(
    credentials=("email", "key"),
    api_limiter=Throttler(rate_limit=10),
) as client:
    page = await client.search_frn("test")

Raw client

async with fca_api.raw_api.RawClient(credentials=("email", "key")) as client:
    response = await client.search_frn("Barclays")
    for item in response.data or []:
        print(item)
    print(response.result_info)

Documentation

Full reference at docs.release.art/fca-api. Every public class and method carries a docstring; use help() in the REPL or your IDE.

Authentication

Get credentials from the FCA Developer Portal (free registration). Keep them out of version control.

License

Mozilla Public License 2.0 — see LICENSE.

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

fca_api-2.0.0.tar.gz (39.1 kB view details)

Uploaded Source

Built Distribution

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

fca_api-2.0.0-py3-none-any.whl (44.1 kB view details)

Uploaded Python 3

File details

Details for the file fca_api-2.0.0.tar.gz.

File metadata

  • Download URL: fca_api-2.0.0.tar.gz
  • Upload date:
  • Size: 39.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: pdm/2.27.0 CPython/3.13.13 Linux/6.17.0-1018-azure

File hashes

Hashes for fca_api-2.0.0.tar.gz
Algorithm Hash digest
SHA256 deee6d397021a9abfcd060538a85c96fdc062480c2570cfc0285004f2cb21bfb
MD5 f0257e956d1c35389f9fb7b845a7dcef
BLAKE2b-256 51f6bfbe28fa4b5fad88bfd46ad48ef166162a1b6e4614a904a968a0cc80ec46

See more details on using hashes here.

File details

Details for the file fca_api-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: fca_api-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 44.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: pdm/2.27.0 CPython/3.13.13 Linux/6.17.0-1018-azure

File hashes

Hashes for fca_api-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9445d5d73fb114dcdc1ed8cd74bd45713ca419ee30f9e48b8353249a94d96df4
MD5 0c99c68409f4f15bbbb1656102427125
BLAKE2b-256 f47eb3ca948f4b2b47f431d75384b0edd2349b0c266b90d77dbd3aa2317cfed6

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