Hackford People API
The People API from Hackford — 1 operation(s) for people.
The People API from Hackford — 1 operation(s) for people.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/hackforddata-com:hackforddata-com-people-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Hackford Public People API
version: v1
description: Versioned public API for Hackford regulated-firm intelligence. Firm type is Hackford's public regulated-firm grouping contract.
contact:
email: support@hackforddata.com
servers:
- url: https://api.hackforddata.com/v1
description: Production
tags:
- name: People
paths:
/firms/{hackford_id}/people:
get:
operationId: firms_people_retrieve
description: Return FCA Extract approved-function and role-holder records for a canonical firm. Results are current roles by default. Customer-visible LinkedIn records are returned on the person and firm-scoped email records are returned on current roles.
summary: Firm people
parameters:
- in: query
name: current
schema:
type: string
description: Whether to return current roles. Defaults to `true`; use `false` for historical roles or `all` for both.
- in: path
name: hackford_id
schema:
type: string
required: true
- in: query
name: page
schema:
type: integer
description: 1-based page number.
- in: query
name: page_size
schema:
type: integer
description: Page size. Defaults to 25 and is capped at 100.
- in: query
name: role
schema:
type: string
description: Role title/function text filter, for example `SMF16`.
- in: query
name: role_code
schema:
type: string
description: Comma-separated role/function codes, for example `SMF16,SMF17`.
- in: query
name: role_group
schema:
type: string
description: FCA approved-function group such as `compliance`, `executive`, `director`, `ned` or `all`.
- in: query
name: source_authority
schema:
type: string
enum:
- fca
description: Role source authority. Public API v1 people roles come from FCA Extract.
- in: query
name: status
schema:
type: string
description: 'Role status: `current`, `previous` or `both`. Defaults to `current`.'
tags:
- People
security:
- OAuthAccessTokenAuth: []
- PublicApiKeyAuth: []
- jwtAuth: []
- tokenAuth: []
- cookieAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/FirmPeopleResponse'
examples:
CurrentSMF16:
value:
firm:
hackford_id: abc123de
display_name: Example FCA Adviser Ltd
canonical_url: /firm/abc123de/example-fca-adviser-ltd
identifiers:
fca_frn: '123456'
sec_crd: null
sec_file: null
cik: null
companies_house: '12345678'
lei: null
count: 1
page: 1
page_size: 25
next: null
previous: null
results:
- person:
individual_reference_number: IRN123
full_name: Alex Compliance
first_name: Alex
last_name: Compliance
linkedin:
- linkedin_url: https://www.linkedin.com/in/alex-compliance
updated_at: '2026-09-09T09:00:00Z'
role:
title: SMF16 Compliance Oversight
source_authority: fca
start_date: '2025-01-15'
end_date: null
is_current: true
emails:
- email: alex.compliance@example.com
email_confidence: high
updated_at: '2026-09-09T09:00:00Z'
summary: Current SMF16
description: ''
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/PublicApiError'
description: ''
'429':
content:
application/json:
schema:
$ref: '#/components/schemas/PublicApiError'
description: ''
components:
schemas:
PublicPersonEmail:
type: object
properties:
email:
type: string
format: email
email_confidence:
$ref: '#/components/schemas/EmailConfidenceEnum'
updated_at:
type:
- string
- 'null'
format: date-time
required:
- email
- updated_at
PublicApiError:
type: object
properties:
detail:
type: string
code:
type: string
export_usage:
$ref: '#/components/schemas/ExportUsage'
required:
- detail
PublicPersonWithContacts:
type: object
properties:
individual_reference_number:
type:
- string
- 'null'
full_name:
type:
- string
- 'null'
first_name:
type:
- string
- 'null'
last_name:
type:
- string
- 'null'
linkedin:
type: array
items:
$ref: '#/components/schemas/PublicPersonLinkedIn'
required:
- first_name
- full_name
- individual_reference_number
- last_name
- linkedin
ExportUsage:
type: object
properties:
credits_consumed:
type: integer
credits_remaining:
type: integer
quota:
type: integer
owner_type:
$ref: '#/components/schemas/OwnerTypeEnum'
resets_at:
type: string
format: date-time
required:
- credits_consumed
- credits_remaining
- owner_type
- quota
- resets_at
NullEnum:
enum:
- null
SourceAuthorityEnum:
enum:
- fca
type: string
description: '* `fca` - fca'
OwnerTypeEnum:
enum:
- individual
- organisation
type: string
description: '* `individual` - individual
* `organisation` - organisation'
FirmPeopleResponse:
type: object
properties:
firm:
$ref: '#/components/schemas/FirmPeopleFirm'
count:
type: integer
page:
type: integer
page_size:
type: integer
next:
type:
- string
- 'null'
previous:
type:
- string
- 'null'
source: {}
results:
type: array
items:
$ref: '#/components/schemas/FirmPeopleRow'
required:
- count
- firm
- next
- page
- page_size
- previous
- results
FirmIdentifiers:
type: object
properties:
fca_frn:
type:
- string
- 'null'
sec_crd:
type:
- string
- 'null'
sec_file:
type:
- string
- 'null'
cik:
type:
- string
- 'null'
companies_house:
type:
- string
- 'null'
lei:
type:
- string
- 'null'
EmailConfidenceEnum:
enum:
- high
- medium
- low
type: string
description: '* `high` - high
* `medium` - medium
* `low` - low'
FirmPeopleFirm:
type: object
properties:
hackford_id:
type: string
display_name:
type: string
canonical_url:
type: string
identifiers:
$ref: '#/components/schemas/FirmIdentifiers'
required:
- canonical_url
- display_name
- hackford_id
- identifiers
PublicPersonLinkedIn:
type: object
properties:
linkedin_url:
type: string
format: uri
updated_at:
type:
- string
- 'null'
format: date-time
required:
- linkedin_url
- updated_at
PublicPersonRoleWithContacts:
type: object
properties:
title:
type:
- string
- 'null'
source_authority:
oneOf:
- $ref: '#/components/schemas/SourceAuthorityEnum'
- $ref: '#/components/schemas/NullEnum'
start_date:
type:
- string
- 'null'
format: date
end_date:
type:
- string
- 'null'
format: date
is_current:
type: boolean
emails:
type: array
items:
$ref: '#/components/schemas/PublicPersonEmail'
required:
- emails
- end_date
- is_current
- source_authority
- start_date
- title
FirmPeopleRow:
type: object
properties:
person:
$ref: '#/components/schemas/PublicPersonWithContacts'
role:
$ref: '#/components/schemas/PublicPersonRoleWithContacts'
required:
- person
- role
securitySchemes:
OAuthAccessTokenAuth:
type: http
scheme: bearer
bearerFormat: OAuth 2.1 access token
PublicApiKeyAuth:
type: http
scheme: bearer
bearerFormat: Hackford public API key
cookieAuth:
type: apiKey
in: cookie
name: sessionid
jwtAuth:
type: http
scheme: bearer
bearerFormat: JWT
tokenAuth:
type: apiKey
in: header
name: Authorization
description: Token-based authentication with required prefix "Token"