Topograph Data API
The Data API from Topograph — 3 operation(s) for data.
The Data API from Topograph — 3 operation(s) for data.
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/topograph-data-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: Topograph Billing Data API
description: The Topograph API
version: '0.1'
contact: {}
servers:
- url: https://api.topograph.co
security:
- x-api-key: []
tags:
- name: Data
paths:
/v2/company:
post:
description: 'Retrieve company data and documents for a specific company.
You can either:
1. Create a new request by providing countryCode, id, dataPoints, optional mode, and optional document IDs.
2. Re-fetch a previous request by providing requestId (returns cached data and is not billed again).
Available datapoints include:
- company: core company information
- legalRepresentatives: directors, managers, and signing officers
- otherKeyPersons: auditors, board members, and similar roles when available
- establishments: branches and secondary locations when available
- shareholders: shareholder structure
- subsidiaries: downstream equity holdings when available
- ultimateBeneficialOwners: beneficial owner information
- availableDocuments: list of available official documents
- graph: ownership graph traversal
Legacy companyProfile is still accepted and maps to company + legalRepresentatives for billing.
Modes:
- verification (default): authoritative live registry sources
- onboarding: cheapest compatible fast source; unsupported datapoints fail with fast_source_unavailable
To retrieve documents, first request availableDocuments to discover document IDs, then pass those IDs in the documents field of a follow-up request.'
operationId: CompanyController_getCompany_v2
parameters:
- name: transliterate
required: false
in: query
description: If true, transliterates non-Latin strings in the response to Latin script.
schema:
type: boolean
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/CreateCompanyRequestDTO'
- $ref: '#/components/schemas/GetCompanyRequestResultDTO'
responses:
'200':
description: Company information
content:
application/json:
schema:
$ref: '#/components/schemas/GetCompanyResultDTO'
security:
- x-api-key: []
summary: Get Company Data and Documents
tags:
- Data
/v2/company/{requestId}:
get:
description: 'Retrieve the result of a previous company data request by its ID. Returns the latest available data including all subrequests (documents, additional datapoints).
This endpoint is free and will not be billed again. Use it to poll for results after creating a request via POST /v2/company.'
operationId: CompanyController_getCompanyRequest_v2
parameters:
- name: requestId
required: true
in: path
description: The request ID returned by the initial POST /v2/company call
schema:
example: 253299d1-e8d0-4268-945b-f175f98bc114
type: string
- name: transliterate
required: false
in: query
description: If true, transliterates non-Latin strings in the response to Latin script.
schema:
type: boolean
responses:
'200':
description: Company request result
content:
application/json:
schema:
$ref: '#/components/schemas/GetCompanyResultDTO'
'404':
description: Request not found or does not belong to this account
security:
- x-api-key: []
summary: Get Company Request Result
tags:
- Data
/v2/onboarding:
post:
deprecated: true
description: 'Deprecated: Use POST /v2/company with mode: "onboarding" instead.
This endpoint is internally routed as a companyProfile request with mode: "onboarding" and a 50-cent budget cap.'
operationId: CompanyOnboardingController_getOnboarding_v2
parameters:
- name: transliterate
required: false
in: query
description: If true, transliterates non-Latin strings in the response to Latin script.
schema:
type: boolean
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/CreateOnboardingRequestDTO'
- $ref: '#/components/schemas/GetCompanyRequestResultDTO'
responses:
'200':
description: Company onboarding information
content:
application/json:
schema:
$ref: '#/components/schemas/GetCompanyResultDTO'
security:
- x-api-key: []
summary: Get Onboarding Data (Deprecated)
tags:
- Data
components:
schemas:
ComplianceFlagsDTO:
type: object
properties:
accountsOverdue:
description: Present when the company’s statutory annual accounts are overdue with the register.
allOf:
- $ref: '#/components/schemas/AccountsOverdueFlagDTO'
annualFilingOverdue:
description: Present when the company’s periodic confirmation/annual filing is overdue with the register (in the UK, the Companies House confirmation statement).
allOf:
- $ref: '#/components/schemas/AnnualFilingOverdueFlagDTO'
AddressDTO:
type: object
properties:
addressLine1:
type: string
description: First line of the address
example: 10 rue de la Fraternité
addressLine2:
type: string
description: Second line of the address
example: Topograph Building
city:
type: string
description: City of the address
example: Bagnolet
postalCode:
type: string
description: Postal code of the address
example: '93170'
region:
type: string
description: Region of the address
example: FR
countryCode:
type: string
description: Country of the address using ISO 3166-1 alpha-2 country code
example: FR
poBox:
type: string
description: Post Office Box number
example: PO Box 123
careOf:
type: string
description: Care of (c/o) recipient
example: c/o John Doe
state:
type: string
description: State of the address
example: Île-de-France
latitude:
type: number
description: Latitude coordinate
example: 59.9139
longitude:
type: number
description: Longitude coordinate
example: 10.7522
ArticleOfAssociationDTO:
type: object
properties:
id:
type: string
name:
type: string
description: Document name in the local language of the country where it was issued
description:
type: string
description: Document description in English
format:
type: string
estimatedDeliverySeconds:
type: number
url:
type: string
pdfUrl:
type: string
description: URL to converted PDF version (when original document is XML)
blobName:
type: string
price:
type: number
description: Fixed price in cents
priceMarkup:
type: number
description: Price markup percentage
date:
type: string
required:
- id
- name
- format
EntitySourcesDTO:
type: object
properties:
entityId:
type: string
description: Stable entity identifier matching the underlying entity (e.g. ShareholderDTO.entityId, GraphNodeDTO.nodeId for individuals). Lets consumers look up sources by entity rather than relying on positional alignment.
fields:
type: object
description: Per-field data sources, keyed by field name.
overall:
description: Holistic source for this entity (e.g. an AI agent narrative explaining how this shareholder was traced). Distinct from per-field sources, which describe each individual datapoint.
allOf:
- $ref: '#/components/schemas/DataSourceDTO'
FinancialAnalysisDTO:
type: object
properties:
summary:
type: string
description: Executive summary (2-3 sentences)
narrativeAnalysis:
type: string
description: Detailed multi-paragraph narrative analysis
healthScore:
type: number
description: Overall health score (1-10)
overallRisk:
type: string
enum:
- low
- medium
- high
- critical
ratios:
$ref: '#/components/schemas/FinancialRatiosDTO'
insights:
type: array
items:
$ref: '#/components/schemas/FinancialInsightDTO'
strengths:
type: array
items:
type: string
concerns:
type: array
items:
type: string
trends:
$ref: '#/components/schemas/FinancialTrendsDTO'
required:
- summary
- narrativeAnalysis
- healthScore
- overallRisk
- ratios
- insights
- strengths
- concerns
- trends
FinancialTrendsDTO:
type: object
properties:
revenueDirection:
type: string
enum:
- increasing
- stable
- decreasing
- unknown
profitabilityDirection:
type: string
enum:
- improving
- stable
- declining
- unknown
debtDirection:
type: string
enum:
- decreasing
- stable
- increasing
- unknown
required:
- revenueDirection
- profitabilityDirection
- debtDirection
CompanyRelationshipDTO:
type: object
properties:
relation:
type: string
enum:
- mergedFrom
- mergedInto
- acquired
- acquiredBy
- demergedFrom
- demergedTo
- spunOffFrom
- spunOffTo
- assetTransferFrom
- assetTransferTo
- other
company:
$ref: '#/components/schemas/CompanyDTO'
effectiveDate:
type: string
description: Legal effective date if known (YYYY-MM-DD)
description:
type: string
required:
- relation
- company
FinancialStatementDTO:
type: object
properties:
id:
type: string
name:
type: string
description: Document name in the local language of the country where it was issued
description:
type: string
description: Document description in English
format:
type: string
estimatedDeliverySeconds:
type: number
url:
type: string
pdfUrl:
type: string
description: URL to converted PDF version (when original document is XML)
blobName:
type: string
price:
type: number
description: Fixed price in cents
priceMarkup:
type: number
description: Price markup percentage
date:
type: string
period:
$ref: '#/components/schemas/PeriodDTO'
extractedFinancialData:
description: Extracted financial data from the document (only available after document is downloaded and parsed)
allOf:
- $ref: '#/components/schemas/ExtractedFinancialDataDTO'
required:
- id
- name
- format
LegalRepresentativeDTO:
type: object
properties:
entityId:
type: string
description: Unique identifier to track the same person or company across different roles (legal representatives, shareholders, UBOs, etc.). Since data is retrieved from multiple registries, the same entity may appear with slightly different names or details. This ID allows you to identify that "John Smith" as a legal representative is the same person as "J. Smith" listed as a shareholder.
example: person_001
role:
description: The role of the legal representative
allOf:
- $ref: '#/components/schemas/RoleDTO'
startDate:
type: string
description: The start date of the legal representative's role
example: '2022-01-01'
endDate:
type: string
description: The end date of the legal representative's role (if applicable)
example: '2023-12-31'
type:
type: string
description: The type of the legal representative (individual or company)
enum:
- individual
- company
example: individual
individual:
description: Details of the individual legal representative
allOf:
- $ref: '#/components/schemas/PhysicalPersonBaseDTO'
company:
description: Details of the company legal representative
allOf:
- $ref: '#/components/schemas/CompanyDTO'
representedBy:
description: 'When type is COMPANY: the physical person who represents/acts on behalf of the company (e.g., "représentant permanent" in French)'
allOf:
- $ref: '#/components/schemas/PhysicalPersonBaseDTO'
representationMode:
description: 'How this representative can bind the company: sole (can act alone) or joint (must act with others)'
allOf:
- $ref: '#/components/schemas/RepresentationModeDTO'
required:
- type
EntityListSourcesDTO:
type: object
properties:
overall:
description: List-level source. Describes how the entire list was assembled (e.g. AI reconstruction summary covering all shareholders). The analysis field carries the prose; documents lists the supporting documents.
allOf:
- $ref: '#/components/schemas/DataSourceDTO'
limitations:
description: Structured list of gaps the AI agent flagged about building this list (e.g. unparseable documents, missing share-pledge agreements).
type: array
items:
type: string
items:
description: Per-entity sources, 1:1 by array index with the corresponding entity array (e.g. shareholders, ultimateBeneficialOwners).
type: array
items:
$ref: '#/components/schemas/EntitySourcesDTO'
DataSourcesDTO:
type: object
properties:
company:
type: object
description: Per-field data sources for company profile fields. Keys are field names, values describe the source.
shareholders:
description: Sources for the shareholders list. Carries list-level overall (e.g. AI reconstruction summary), limitations the agent flagged, and per-entity sources 1:1 by index with the shareholders array.
allOf:
- $ref: '#/components/schemas/EntityListSourcesDTO'
ultimateBeneficialOwners:
description: Sources for the ultimate beneficial owners list. Same shape as shareholders.
allOf:
- $ref: '#/components/schemas/EntityListSourcesDTO'
legalRepresentatives:
description: Sources for the legal representatives list. Same shape as shareholders.
allOf:
- $ref: '#/components/schemas/EntityListSourcesDTO'
establishments:
description: Sources for the establishments list. Same shape as shareholders.
allOf:
- $ref: '#/components/schemas/EntityListSourcesDTO'
otherKeyPersons:
description: Sources for the other key persons list. Same shape as shareholders.
allOf:
- $ref: '#/components/schemas/EntityListSourcesDTO'
graph:
description: Sources specific to the ownership graph (per-graph-node provenance). Each company node in the graph that had its shareholders AI-reconstructed carries its own EntityListSourcesDTO under nodes[<nodeId>].shareholders. Distinct from dataSources.shareholders, which is scoped to the result-level shareholders list (the root company only).
allOf:
- $ref: '#/components/schemas/GraphSourcesDTO'
DocumentWithUrlDto:
type: object
properties:
id:
type: string
name:
type: string
description: Document name in the local language of the country where it was issued
description:
type: string
description: Document description in English
format:
type: string
estimatedDeliverySeconds:
type: number
url:
type: string
pdfUrl:
type: string
description: URL to converted PDF version (when original document is XML)
blobName:
type: string
price:
type: number
description: Fixed price in cents
priceMarkup:
type: number
description: Price markup percentage
date:
type: string
required:
- id
- name
CompanyActivityItemDTO:
type: object
properties:
code:
type: string
description: The activity code
example: '62.01'
description:
type: string
description: The description of the activity
example: Computer programming activities
isAIInferred:
type: boolean
description: Indicates whether the activity code comes from an official source or has been inferred by AI
example: true
required:
- code
CountryIdentifiersDTO:
type: object
properties:
VAT:
type: string
description: 'Partita IVA (P.IVA) - VAT registration number. Format: 11 digits (e.g., "02580590541"). Issued by: Agenzia delle Entrate (Revenue Agency)'
example: 02580590541
Codice Fiscale:
type: string
description: 'Codice Fiscale - Tax identification code. Format: 16 alphanumeric characters for individuals (e.g., "RSSMRA70A01H501U"), 11 digits for companies (often same as VAT). Issued by: Agenzia delle Entrate (Revenue Agency)'
example: RSSMRA70A01H501U
CCIAA:
type: string
description: 'CCIAA - Camera di Commercio (Chamber of Commerce) province code. Format: 2-letter province code (e.g., "TO" for Torino, "MI" for Milano). Indicates which Chamber of Commerce the company is registered with.'
example: TO
REA Code:
type: string
description: 'REA Code - Registro Economico Amministrativo (Economic Administrative Register) number. Format: Numeric (e.g., "1234567"). Unique within each CCIAA province. Combined with CCIAA forms a unique identifier.'
example: '1234567'
ItalyIdentifiers:
type: object
properties:
VAT:
type: string
description: 'Partita IVA (P.IVA) - VAT registration number. Format: 11 digits (e.g., "02580590541"). Issued by: Agenzia delle Entrate (Revenue Agency)'
example: 02580590541
Codice Fiscale:
type: string
description: 'Codice Fiscale - Tax identification code. Format: 16 alphanumeric characters for individuals (e.g., "RSSMRA70A01H501U"), 11 digits for companies (often same as VAT). Issued by: Agenzia delle Entrate (Revenue Agency)'
example: RSSMRA70A01H501U
CCIAA:
type: string
description: 'CCIAA - Camera di Commercio (Chamber of Commerce) province code. Format: 2-letter province code (e.g., "TO" for Torino, "MI" for Milano). Indicates which Chamber of Commerce the company is registered with.'
example: TO
REA Code:
type: string
description: 'REA Code - Registro Economico Amministrativo (Economic Administrative Register) number. Format: Numeric (e.g., "1234567"). Unique within each CCIAA province. Combined with CCIAA forms a unique identifier.'
example: '1234567'
description: Identifiers for Italian companies (IT)
PeriodDTO:
type: object
properties:
startDate:
$ref: '#/components/schemas/PeriodDateDTO'
endDate:
$ref: '#/components/schemas/PeriodDateDTO'
PeriodDateDTO:
type: object
properties:
year:
type: number
month:
type: number
day:
type: number
GraphNodeFlagsDTO:
type: object
properties:
isRoot:
type: boolean
description: True if this is the root/target company being analyzed
isUbo:
type: boolean
description: True if this individual has >25% ownership and qualifies as a UBO (individuals only)
isUboProxy:
type: boolean
description: True if this company is the ultimate controlling entity of the target company (companies only)
uboCalculationMethod:
type: array
description: Methods that qualified this individual as UBO (only when isUbo is true)
items:
type: string
enum:
- accumulation
- domination
status:
type: string
description: Status of the node during graph building. `budget_truncated` marks a frontier company that was not fetched because the request ran out of credits; clients can submit a continuation request to expand it.
enum:
- pending
- found
- not_found
- error
- search_resolved
- placeholder
- budget_truncated
DataSourceDocumentDTO:
type: object
properties:
name:
type: string
description: Name of the supporting document
example: Statuts constitutifs
date:
type: string
description: Date of the document
example: '2020-03-15'
reason:
type: string
description: Brief explanation of why this document is pertinent for the analysis
example: Most recent confirmation statement showing 100% ownership by KCA Deutag International 3 Limited
required:
- name
DataPointStatusSucceeded:
type: object
properties:
cost:
type: number
description: The cost in credits for this data point or document
example: 10
costMarkup:
type: number
description: The percentage markup when final cost is not yet known
example: 20
status:
type: string
description: The data point completed successfully
enum:
- succeeded
example: succeeded
authoritative:
type: boolean
description: Whether the data comes from an authoritative official registry source
example: true
required:
- status
RoleEnum:
type: string
enum:
- Director
- Manager
- Employee
- Chief Executive Officer
- Chief Financial Officer
- Chief Operating Officer
- President
- Vice President
- Secretary
- Treasurer
- Legal Advisor
- General Counsel
- Partner
- Associate
- Other
- Chairman of the Board
- Board Member
- Managing Director
- Executive Director
- Non-Executive Director
- General Partner
- Managing Partner
- Limited Partner
- Administrator
- Liquidator
- Receiver
- Owner
- Chairman
- Auditor
- Authorized Signatory
description: The standardized role of the individual.
BirthDateDTO:
type: object
properties:
day:
type: number
description: Day of birth (1-31)
example: 15
month:
type: number
description: Month of birth (1-12), where January is 1
example: 7
year:
type: number
description: Year of birth
example: 1980
GraphNodeDTO:
type: object
properties:
nodeId:
type: string
description: A unique identifier for the node in the graph (for graph traversal)
type:
type: string
description: Whether this is an individual person or a company
enum:
- individual
- company
individual:
description: Individual person data (only populated when type is individual)
allOf:
- $ref: '#/components/schemas/GraphIndividualDTO'
company:
description: Company data (only populated when type is company)
allOf:
- $ref: '#/components/schemas/GraphCompanyDTO'
totalOwnershipPercentage:
type: number
description: The total calculated ownership percentage of the root company (0-100)
flags:
description: Flags indicating special properties of this node
allOf:
- $ref: '#/components/schemas/GraphNodeFlagsDTO'
continuation:
description: Continuation metadata — present only on `budget_truncated` nodes.
allOf:
- $ref: '#/components/schemas/GraphNodeContinuationDTO'
required:
- nodeId
- type
GraphEdgeDTO:
type: object
properties:
id:
type: string
description: Unique identifier for the edge
fromId:
type: string
description: ID of the company being owned
toId:
type: string
description: ID of the entity that owns shares (shareholder)
percentage:
type: number
description: Ownership percentage (0-100)
source:
type: string
description: Source information about where this relationship was found
required:
- id
- fromId
- toId
PersonNameDTO:
type: object
properties:
title:
type: string
description: Title of the person (e.g., Mr., Mrs., Dr.)
firstName:
type: string
description: First name of the person
middleName:
type: string
description: Middle name of the person
lastName:
type: string
description: Last name of the person
fullName:
type: string
description: Full name of the person
suffix:
type: string
description: Suffix of the name (e.g., Jr., Sr., III)
required:
- fullName
AnnualFilingOverdueFlagDTO:
type: object
properties:
active:
type: boolean
example: true
description: Whether the signal is currently active (the annual filing is currently overdue).
dueDate:
type: string
example: '2024-03-01'
description: The date the filing was due (and missed), when the register reports it. ISO 8601 (YYYY-MM-DD).
since:
type: string
example: '2024-03-15'
description: The date the flag became active, when the register reports it. ISO 8601 (YYYY-MM-DD).
source:
type: string
example: companies_house
description: The register that reported the signal.
required:
- active
OtherKeyPersonDTO:
type: object
properties:
entityId:
type: string
description: Unique identifier to track the same person or company across different roles (legal representatives, shareholders, UBOs, etc.). Since data is retrieved from multiple registries, the same entity may appear with slightly different names or details. This ID allows you to identify that "John Smith" as a legal representative is the same person as "J. Smith" listed as a shareholder.
example: person_001
role:
description: The role of the other key person
allOf:
- $ref: '#/components/schemas/OtherKeyPersonRoleDTO'
startDate:
type: string
description: The start date of the role
example: '2022-01-01'
endDate:
type: string
description: The end date of the role (if applicable)
example: '2023-12-31'
type:
type: string
enum:
- individual
- company
description: The type of the other key person (individual or company)
example: individual
individual:
description: Details if the other key person is an individual
allOf:
- $ref: '#/components/schemas/PhysicalPersonBaseDTO'
company:
description: Details if the other key person is a company
allOf:
- $ref: '#/components/schemas/CompanyDTO'
required:
- type
LegalFormEnum:
type: string
enum:
- Sole Proprietorship
- Partnership
- Limited Liability Company
- Corporation
- Nonprofit Organization
- Cooperative
- Government-Owned Entity
- Branch or Representative Office
- Trust
- Other
description: The standardized legal form of the company.
DataPointError:
type: object
properties:
code:
type: string
description: Error code identifying the type of failure
example: resource_not_found
enum:
- resource_not_found
- service_unavailable
- processing_failed
- invalid_request
- datapoint_not_supported
- fast_source_unavailable
- onboarding_timeout
- insufficient_funds
message:
type: string
description: User-friendly error message explaining the failure
example: The requested company was not found. Please verify the registration number and try again.
details:
type: array
description: Additional specific error details when applicable
items:
type: string
example:
- Query must be at least 2 characters
source:
type: string
description: Source register that failed, when the failure is attributable to a specific external register
example: handelsregister
retryable:
type: boolean
description: Whether retrying the request may eventually succeed
example: true
required:
- code
- message
PhysicalPersonBaseDTO:
type: object
properties:
gender:
type: string
description: Gender of the person
enum:
- Male
- Female
- Other
- PreferNotToSay
example: Female
name:
description: Full name of the person
example:
fullName: John Doe
allOf:
- $ref: '#/components/schemas/PersonNameDTO'
birthDate:
description: Birth date of the person
example:
day: 15
month: 7
year: 1980
allOf:
- $ref: '#/components/schemas/BirthDateDTO'
birthAddress:
description: Birth address of the person
example:
country: FR
city: Paris
street: 1 Rue de Rivoli
postalCode: '75001'
allOf:
- $ref: '#/components/schemas/AddressDTO'
nationality:
type: string
description: Nationality ISO2 country code of the person
example: US
residenceAddress:
description: Residence address of the person
allOf:
- $ref: '#/components/schemas/AddressDTO'
identifiers:
type: object
description: Identifiers for the person, as a flat object keyed by identifier type (e.g., codice fiscale, national ID). Each value is the identifier string.
additionalProperties:
type: string
example:
codiceFiscale: RSSMRA80A01H501U
CompanyStatusDetailsDTO:
type: object
properties:
# --- truncated at 32 KB (99 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/topograph/refs/heads/main/openapi/topograph-data-api-openapi.yml