veldora-no Fi API
The Fi API from veldora-no — 2 operation(s) for fi.
The Fi API from veldora-no — 2 operation(s) for fi.
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/veldora-no:veldora-no-fi-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: Veldora No Fi API
version: 1.0.0
contact:
name: Veldora
url: https://veldora.no/contact
license:
name: 'Data: NLOD 2.0 (Brreg, Lovdata), CC BY 4.0 (Doffin, Kartverket, PRH), Norges Bank (source named) and TED reuse terms; see description'
x-deprecation-policy:
url: https://veldora.no/docs#versioning
noticeDays: 90
headers:
- Deprecation
- Sunset
- Link
description: 'Operations tagged Fi across 2 of this provider''s published API definitions: veldora-no-openapi.json, veldora-no-original.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://veldora.no
tags:
- name: Fi
paths:
/v1/fi/companies/{businessId}:
get:
operationId: fiCompany
summary: Look up a Finnish company
description: 'One Finnish company from the PRH trade register (YTJ), cleaned: status (active, bankrupt, winding up, ceased), company form, industry (TOL 2008), address, website, other names, EU ID.
Price: 0.005 USDC per successful call. Failed calls (4xx/5xx) are not charged.'
parameters:
- name: businessId
in: path
required: true
description: Finnish business ID (Y-tunnus), e.g. 0112038-9 (mod-11 checked).
schema:
type: string
pattern: ^\d{7}-?\d$
- name: PAYMENT-SIGNATURE
in: header
required: false
description: Base64-encoded x402 v2 PaymentPayload. Leave out to get the price.
schema:
type: string
x-price:
amount: '0.005'
currency: USD
asset: USDC
atomic: '5000'
network: eip155:8453
responses:
'200':
description: Data. The PAYMENT-RESPONSE header holds the settlement receipt (base64 JSON).
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
PAYMENT-RESPONSE:
schema:
type: string
X-Data-Fetched-At:
schema:
type: string
format: date-time
X-Data-Stale:
schema:
type: string
enum:
- 'true'
- 'false'
content:
application/json:
schema:
type: object
properties:
data: {}
page:
type: object
meta:
type: object
'400':
description: Invalid input. Not charged; no payment is asked for.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Payment required. The PAYMENT-REQUIRED header (base64 JSON, x402 v2) lists what to pay. Sign it with an x402 client and resend the request with the PAYMENT-SIGNATURE header. The body repeats the requirements, plus `error` when a payment was rejected.
headers:
PAYMENT-REQUIRED:
schema:
type: string
description: Base64-encoded PaymentRequired (x402 v2).
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentRequired'
'404':
description: Not found. Not charged.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'405':
description: Method not allowed.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: The same payment is being processed by another request. Retry with the same header.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limited. Not charged. See Retry-After.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
Retry-After:
$ref: '#/components/headers/Retry-After'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal error. Not charged.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'502':
description: A data source answered with an error. Not charged; retry.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Upstream data source, facilitator or settlement unavailable. Not charged; retry.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Fi
servers:
- url: https://veldora.no
/v1/fi/companies:
get:
operationId: fiCompanySearch
summary: Search Finnish companies
description: 'Search Finnish companies from the PRH trade register by name (current and former names), town or city, company form, industry code (TOL 2008) and postcode. Give at least one filter. Up to 100 hits per page.
Price: 0.01 USDC per successful call. Failed calls (4xx/5xx) are not charged.'
parameters:
- name: q
in: query
required: false
description: Name, or part of it.
schema:
type: string
minLength: 2
maxLength: 100
- name: municipality
in: query
required: false
description: Town or city name, e.g. Helsinki.
schema:
type: string
minLength: 2
maxLength: 100
- name: company_form
in: query
required: false
description: Company form code, e.g. OY, OYJ, KY, OK, SÄÄ.
schema:
type: string
enum:
- AOY
- ASH
- ASY
- AY
- AYH
- ETS
- ETY
- SCE
- SCP
- HY
- KOY
- KVJ
- KVY
- KY
- OK
- OP
- OY
- OYJ
- SE
- SL
- SP
- SÄÄ
- TYH
- VOJ
- VOY
- VY
- VALTLL
- name: industry
in: query
required: false
description: TOL 2008 industry code or prefix, e.g. 62 or 62010.
schema:
type: string
pattern: ^\d{2,5}$
- name: postcode
in: query
required: false
description: 5-digit postcode, e.g. 00100.
schema:
type: string
pattern: ^\d{5}$
- name: page
in: query
required: false
description: Zero-based page.
schema:
type: integer
minimum: 0
default: 0
- name: PAYMENT-SIGNATURE
in: header
required: false
description: Base64-encoded x402 v2 PaymentPayload. Leave out to get the price.
schema:
type: string
x-price:
amount: '0.01'
currency: USD
asset: USDC
atomic: '10000'
network: eip155:8453
responses:
'200':
description: Data. The PAYMENT-RESPONSE header holds the settlement receipt (base64 JSON).
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
PAYMENT-RESPONSE:
schema:
type: string
X-Data-Fetched-At:
schema:
type: string
format: date-time
X-Data-Stale:
schema:
type: string
enum:
- 'true'
- 'false'
content:
application/json:
schema:
type: object
properties:
data: {}
page:
type: object
meta:
type: object
'400':
description: Invalid input. Not charged; no payment is asked for.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Payment required. The PAYMENT-REQUIRED header (base64 JSON, x402 v2) lists what to pay. Sign it with an x402 client and resend the request with the PAYMENT-SIGNATURE header. The body repeats the requirements, plus `error` when a payment was rejected.
headers:
PAYMENT-REQUIRED:
schema:
type: string
description: Base64-encoded PaymentRequired (x402 v2).
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentRequired'
'404':
description: Not found. Not charged.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'405':
description: Method not allowed.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: The same payment is being processed by another request. Retry with the same header.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limited. Not charged. See Retry-After.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
Retry-After:
$ref: '#/components/headers/Retry-After'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal error. Not charged.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'502':
description: A data source answered with an error. Not charged; retry.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Upstream data source, facilitator or settlement unavailable. Not charged; retry.
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Fi
servers:
- url: https://veldora.no
components:
headers:
RateLimit-Limit:
description: Requests allowed per window.
schema:
type: integer
RateLimit:
description: Remaining quota and seconds to reset, structured (draft-ietf-httpapi-ratelimit-headers), e.g. "per-ip";r=119;t=60.
schema:
type: string
Retry-After:
description: Seconds to wait before retrying.
schema:
type: integer
RateLimit-Reset:
description: Seconds until the window resets.
schema:
type: integer
RateLimit-Remaining:
description: Requests left in the current window.
schema:
type: integer
RateLimit-Policy:
description: 'Quota policy: 120 requests per 60 seconds per IP, e.g. "per-ip";q=120;w=60.'
schema:
type: string
schemas:
Error:
type: object
description: Every error from the API has this shape. Branch on `error.code`; `retryable` says whether the same request can succeed later.
properties:
error:
type: object
properties:
code:
type: string
description: Machine-readable error code.
examples:
- invalid_orgnr
- invalid_id
- invalid_parameter
- unknown_parameter
- missing_filter
- paging_limit
- enk_name_search
- not_found
- method_not_allowed
- rate_limited
- payment_in_progress
- settlement_pending
- payments_unavailable
- facilitator_unavailable
- data_unavailable
- upstream_unavailable
- temporarily_unavailable
- internal_error
message:
type: string
description: What went wrong and what to do next, in English.
retryable:
type: boolean
description: 'True for 429, 502, 503 and 504: try again later with the same request.'
docs:
type: string
format: uri
description: Link to the error reference.
required:
- code
- message
- retryable
- docs
additionalProperties: true
required:
- error
PaymentRequired:
type: object
description: x402 v2 PaymentRequired. The same object is base64-encoded in the PAYMENT-REQUIRED header.
properties:
x402Version:
type: integer
const: 2
error:
type: string
description: Why a sent payment was refused (absent on the first 402).
resource:
type: object
properties:
url:
type: string
format: uri
description:
type: string
mimeType:
type: string
accepts:
type: array
items:
type: object
properties:
scheme:
type: string
const: exact
network:
type: string
description: CAIP-2 chain id, e.g. eip155:8453.
amount:
type: string
description: Price in USDC atomic units (6 decimals).
asset:
type: string
description: USDC contract address.
payTo:
type: string
maxTimeoutSeconds:
type: integer
extra:
type: object
required:
- scheme
- network
- amount
- asset
- payTo
extensions:
type: object
required:
- x402Version
- accepts
externalDocs:
description: Docs, pricing and examples
url: https://veldora.no/docs
x-refined-from:
- veldora-no-openapi.json
- veldora-no-original.json
x-mcp:
url: https://veldora.no/mcp
transport: streamable-http