Fca Api — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Fca Api (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
httpx, pydanticpip install fca-apiimport asyncio
import fca_api
async def main():
async with fca_api.async_api.Client(
credentials=("[email protected]", "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())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 = 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))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})")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}")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")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)Full reference at docs.release.art/fca-api. Every public class and method carries a docstring; use help() in the REPL or your IDE.
Get credentials from the FCA Developer Portal (free registration). Keep them out of version control.
Mozilla Public License 2.0 — see LICENSE.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.