Every endpoint with method, path, parameters, request, an example answer for RELACON GmbH, the fields of the answer and the error codes. Amounts appear in the examples only as placeholders.
Create the key while signed in, in your account under API and MCP. It starts with fbd_ and is shown once. Every call carries it in the Authorization header as Bearer.
Authorization: Bearer fbd_…
Allowance per UTC month: Free 50, Pro 50, Business 1,000 calls. Every request costs one call, search, customer check and every PDF included. No fee per query.
Every answer carries x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-reset. When the calls are used up, the API answers 429 and names limit and resetAt in the body.
When a subscription ends, the same key keeps working with the limits of Free.
There is no separate sandbox: the free key runs on the live data.
Base address: https://api.firmenbuchdaten.at/v1
The previous address https://firmenbuchdaten.at/api/v1 stays valid and gives the same answers. https://api.firmenbuchdaten.at serves the API only, no pages.
Company API
Finds a company by name and returns its register data: name, seat, legal form, status, the filed annual accounts and edicts in insolvency proceedings. For setting up a new customer or supplier.
GET/v1/companies
Search companies by name. Hits from our index, without a register call, with the filters of the advanced search. At least q or one filter. One page is one call. Other filters (state, district, ÖNACE) answer 400 unsupported_filter.
Still valid: https://firmenbuchdaten.at/api/v1/companies
Plan: All plans
Parameters
Name
Type
Required
Description
q
string, query
no
Name, part of it (at least three characters) or register number
rechtsform
string, query
no
Legal form as in the register, e.g. Gesellschaft mit beschränkter Haftung
sitz
string, query
no
Seat as in the register, e.g. Wien
gkl
string, query
no
Size class of the latest accounts: W, K, M or G
seit
string, query
no
Only companies with accounts filed on or after this day (YYYY-MM-DD)
limit
integer, query
no
Hits per page, 1 to 50, default 25
cursor
string, query
no
nextCursor of the previous answer; at most 20 pages
Value for cursor of the next page, null at the end
Errors
Status
Code
Meaning
400
query_too_short
No term and no filter, or a term shorter than three characters.
400
unsupported_filter
A parameter the search does not know; the answer names the supported ones.
400
cursor_too_deep
More than 20 pages; narrow the filters.
GET/v1/companies/{fnr}
Company data. Name, seat, legal form, status, the list of annual accounts with balance sheet date, size class and filing date, the latest entry date and edicts on sales and leases in insolvency proceedings. No management, no shareholders; an edict names the administrator as the edict file publishes it.
Still valid: https://firmenbuchdaten.at/api/v1/companies/{fnr}
Plan: All plans. Business also: industry (ÖNACE) according to Statistics Austria, public contracts, FMA sanctions, credit institution according to OeNB and the number of connections.
LEI according to GLEIF; empty until the GLEIF data is loadedBusiness only
oenace
object | null
Industry by ÖNACE according to Statistics AustriaBusiness only
publicAwards
object | null
Public contracts according to data.gv.atBusiness only
fmaSanctions[]
array
FMA sanctions against the company: title, date, urlBusiness only
bank
object | null
Credit institution according to OeNBBusiness only
network
object | null
Connections: persons (natural persons with functions in other active companies) and companies (number of those companies), counts onlyBusiness only
persons
string
Path to the functions of this company (person API)Business only
Errors
Status
Code
Meaning
400
invalid_fnr
Not a valid register number, for example a wrong check letter.
404
not_found
No such register number.
GET/v1/companies/{fnr}/gewerbe
Trade licences (GISA). Trade licences of a company from the Austrian trade information system: wording, trade code, location, status (active, dormant, ended), start and end. One single query per call through the public GISA interface, cached for 7 days, matched by register number only. No managers, no lists, not for sole traders.
Still valid: https://firmenbuchdaten.at/api/v1/companies/{fnr}/gewerbe
{
"fnr": "508415w",
"fetchedAt": "<JJJJ-MM-TTThh:mm:ssZ>",
"trades": [
{
"gisaZahl": "<GISA-Zahl>",
"wortlaut": "<Wortlaut>",
"gewerbeschluessel": "<Schlüssel>",
"plz": "<PLZ>",
"ort": "<Ort>",
"status": "aktiv",
"beginn": "<JJJJ-MM-TT>",
"ende": null
}
],
"source": "Austrian trade information system (GISA), Federal Ministry of Economy, Energy and Tourism, single query through the public interface"
}
Field
Type
Description
fnr
string
Register number
fetchedAt
string
Time of the GISA query
trades[]
array
gisaZahl, wortlaut, gewerbeschluessel, plz, ort, status, beginn, ende
source
string
Source line
Errors
Status
Code
Meaning
400
invalid_fnr
Not a valid register number.
403
plan
Pro or Business only.
404
unknown_company
The company is not in our database yet. Fetch the company first, then GISA.
404
sole_trader
No GISA lookup for sole traders.
429
account_limit
This account's daily limit of GISA lookups is reached.
429
in_progress
This company is being looked up; in a minute the result is in the cache.
503
paused
GISA lookups are paused (minute or day budget, or GISA does not answer).
Annual accounts API
Returns a year's balance sheet and P&L as the company filed them, with our ratios, and the annual accounts as PDF. For in-house credit checks, files and reports.
GET/v1/companies/{fnr}/financials
Balance sheet, P&L and ratios. Per year the balance sheet items and, where filed, the P&L in cents, unchanged from the register, plus our ratios. load=1 fetches one missing year from the register.
Still valid: https://firmenbuchdaten.at/api/v1/companies/{fnr}/financials
Plan: Pro and Business: every company. Free: only the company of your free query.
{
"fnr": "508415w",
"name": "RELACON GmbH",
"years": [
{
"stichtag": "2025-12-31",
"sizeClass": "W",
"hasProfitAndLoss": false,
"positionsCents": {
"<Posten>": "<Betrag in Cent>"
},
"evaluation": {
"<Kennzahl>": "<Wert>"
}
}
],
"notLoaded": [],
"note": "positionsCents: register figures in euro cents, unchanged. evaluation: computed by firmenbuchdaten.at, not part of the register.",
"source": "Österreichisches Firmenbuch, Republik Österreich, vertreten durch das BMJ, offene Daten unter CC BY 4.0"
}
Field
Type
Description
fnr
string
Register number
name
string
Company name
years[]
array
Per loaded year: stichtag, sizeClass, hasProfitAndLoss, positionsCents, evaluation
years[].positionsCents
object
Register items in euro cents, unchanged
years[].evaluation
object
Ratios computed by firmenbuchdaten.at, not part of the register
notLoaded[]
array
Balance sheet dates not loaded yet (load=1 fetches one)
note
string
Note on which figures come from the register and which from us
source
string
Source line
Errors
Status
Code
Meaning
403
plan_without_financials
Free: figures only for the company of your free query. Pro or Business for every company.
404
not_found
No such register number.
GET/v1/companies/{fnr}/documents/{stichtag}
Annual accounts as PDF. The annual accounts as filed with the register. At most 20 PDFs per key and hour.
Still valid: https://firmenbuchdaten.at/api/v1/companies/{fnr}/documents/{stichtag}
The PDF file (application/pdf) as filed with the register.
Errors
Status
Code
Meaning
400
invalid
Register number or date invalid.
403
plan_without_financials
PDFs come with Pro or Business.
429
rate
More than 20 PDFs in one hour.
Person API
Shows who holds management, authorised signatory or another function in a company according to the register, and in which other companies the same person is entered. For checking business partners, Business only. Every call is logged for 90 days.
GET/v1/persons
Search persons. Persons with functions in the register by name, at most 20 hits with name and number of companies. With geburtsdatum exactly the one person with this name and birth date. We do not store or return the birth date itself.
Still valid: https://firmenbuchdaten.at/api/v1/persons
{
"results": [
{
"key": "<key>",
"name": "<Name>",
"companies": 2,
"legalEntity": false
}
],
"source": "Österreichisches Firmenbuch, Republik Österreich, vertreten durch das BMJ, offene Daten unter CC BY 4.0"
}
Field
Type
Description
results[].key
string
Key for /v1/persons/{key}
results[].name
string
Name as in the register
results[].companies
integer
Number of companies with a function
results[].legalEntity
boolean
true for legal entities (e.g. a GmbH as shareholder)
source
string
Source line
Errors
Status
Code
Meaning
400
name_too_short
No part of the name with at least three characters.
403
plan_without_persons
Persons through the API come with Business only.
429
person_rate
More than 30 person calls in an hour or 100 in a day (shared with the person search of the website).
GET/v1/persons/{key}
Functions of a person. Current functions with company, register number, function and since when, plus functions no longer in the register extract, with the day we noticed.
Still valid: https://firmenbuchdaten.at/api/v1/persons/{key}
fnr, company, code, function, since, notInExtractSince (day the function was no longer in the extract)
source
string
Source line
Errors
Status
Code
Meaning
400
invalid_key
Not a valid key.
403
plan_without_persons
Persons through the API come with Business only.
404
not_found
No person with this key.
429
person_rate
Hourly or daily limit of person calls reached.
GET/v1/companies/{fnr}/persons
Functions in a company. Who holds a function in this company (management, authorised signatory, shareholders as in the extract, supervisory board), since when and how they represent it, and who is no longer in the extract. We do not keep shareholdings.
Still valid: https://firmenbuchdaten.at/api/v1/companies/{fnr}/persons
Returns the companies with a new entry, a deletion, newly filed annual accounts or an edict in a period, or only for the companies you watch. This keeps your CRM current without querying every company.
GET/v1/changes
Changes in a period. Companies with a change in a period of at most 31 days, 100 per page. art: aenderung (newest entry in the period, new companies included), loeschung (deletion), abschluss (annual accounts filed), edikt. Per company the newest entry counts, not every single one; new entries on their own and changes of functions are planned.
Still valid: https://firmenbuchdaten.at/api/v1/changes
Plan: Business. One page is one call.
Parameters
Name
Type
Required
Description
since
string, query
yes
First day, YYYY-MM-DD
until
string, query
no
Last day, at most 31 days after since
art
string, query
no
aenderung (default), loeschung, abschluss or edikt
{
"since": "2026-11-01",
"until": "2026-11-07",
"art": "aenderung",
"changes": [
{
"fnr": "508415w",
"name": "RELACON GmbH",
"kind": "aenderung",
"date": "<JJJJ-MM-TT>",
"sitz": "Klosterneuburg",
"rechtsform": "Gesellschaft mit beschränkter Haftung",
"description": "Eintragung im Firmenbuch"
}
],
"nextCursor": "<Cursor>",
"source": "Österreichisches Firmenbuch, Republik Österreich, vertreten durch das BMJ, offene Daten unter CC BY 4.0"
}
Field
Type
Description
since
string
First day
until
string
Last day
art
string
Kind asked for
changes[]
array
fnr, name, kind, date (day of entry, filing or publication), sitz, rechtsform, description
nextCursor
string | null
Value for cursor of the next page, null at the end
source
string
Source line
Errors
Status
Code
Meaning
400
invalid_since
since missing or not a date.
400
range_too_long
Period longer than 31 days.
400
kind_not_available
art=neueintragung or art=funktion: planned, not derivable today.
400
unsupported_filter
A parameter the list does not know (such as bundesland, bezirk, oenace).
403
plan_without_changes
The change list comes with Business; the watchlist with every plan.
GET/v1/watchlist/changes
Changes of watched companies. The same for the companies your account watches (Free 5, Pro 25, Business 250): newest entry, filed annual accounts and edicts since since, at most 93 days back.
Still valid: https://firmenbuchdaten.at/api/v1/watchlist/changes
{
"since": "2026-11-01",
"changes": [
{
"fnr": "508415w",
"name": "RELACON GmbH",
"kind": "abschluss",
"date": "<JJJJ-MM-TT>",
"sitz": "Klosterneuburg",
"rechtsform": "Gesellschaft mit beschränkter Haftung",
"description": "Jahresabschluss eingereicht"
}
],
"source": "Österreichisches Firmenbuch, Republik Österreich, vertreten durch das BMJ, offene Daten unter CC BY 4.0"
}
Field
Type
Description
since
string
First day
changes[]
array
as in /v1/changes, newest first
source
string
Source line
Errors
Status
Code
Meaning
400
invalid_since
since missing, not a date or in the future.
400
range_too_long
since lies too far back; the answer names the earliest day.
Customer check API
Gives a traffic light with payment term and the reasons for it, from the register, filings and the edict file. For the question: prepayment or invoice?
GET/v1/kundencheck/{fnr}
Customer check. The traffic light of the customer check with payment term and every signal (status, age, filing, size class, changes, edicts), each with German and English text. No amounts, no credit rating.
Still valid: https://firmenbuchdaten.at/api/v1/kundencheck/{fnr}
Plan: All plans. Business also: check against the EU sanctions list.
{
"fnr": "508415w",
"name": "RELACON GmbH",
"sitz": "Klosterneuburg",
"rechtsform": "Gesellschaft mit beschränkter Haftung",
"light": "<green | yellow | red>",
"lightText": {
"de": "<Text>",
"en": "<text>"
},
"paymentTerm": "<vorkasse | 14 | 30>",
"paymentTermText": {
"de": "<Text>",
"en": "<text>"
},
"registerRead": true,
"signals": [
{
"key": "status",
"level": "ok",
"data": {
"status": "active"
},
"de": "<Text>",
"en": "<text>"
}
],
"sanctions": null,
"fmaSanctions": [],
"note": "<Hinweis>",
"page": "https://firmenbuchdaten.at/kundencheck/508415w",
"source": "Österreichisches Firmenbuch, Republik Österreich, vertreten durch das BMJ, offene Daten unter CC BY 4.0; Edikte: Republik Österreich, vertreten durch das BMJ (Ediktsdatei)"
}
Field
Type
Description
fnr
string
Register number
name
string
Company name
sitz
string
Seat according to the register
rechtsform
string
Legal form
light
string
green, yellow or red
lightText
object
Text for the light, de and en
paymentTerm
string
vorkasse (prepayment), 14 or 30 (days)
paymentTermText
object
Text for the payment term, de and en
registerRead
boolean
true when the register was read for this check
signals[]
array
Every signal with key, level, data and text de/en
sanctions
object | null
Check against the EU sanctions list; null without Business or while no list is loaded
fmaSanctions[]
array
FMA sanctions against the company
note
string
Note: not a credit rating
page
string
Address of the customer check page
source
string
Source line
Errors
Status
Code
Meaning
400
invalid_fnr
Not a valid register number.
403
sole_trader
Sole traders are not checked; their name is a person's name.
404
not_found
No such register number.
VAT ID check (VIES)
Checks an EU VAT ID at VIES of the European Commission and names the name and address the member state shares, plus a cautious match with the register. Costs no call of the month.
GET/v1/uid/{uid}
Check a VAT ID. First the format and, for Austrian numbers, the check digit (without asking VIES), then VIES. state: gueltig (valid), ungueltig (not valid) or unerreichbar (VIES or the member state is not answering; never guessed). Answers are cached for 24 hours, unerreichbar never. match names a company of ours with the same name only as probable, because the register keeps no VAT IDs. Does not count against the monthly allowance; at most 100 checks per hour and account.
Still valid: https://firmenbuchdaten.at/api/v1/uid/{uid}
Plan: All plans, without a call from the allowance.
More than 100 VAT ID checks in an hour; Retry-After names the seconds.
429
vies_busy
The shared cap for requests to VIES is reached for this minute.
Errors any call can return
Status
Code
Meaning
401
missing_or_invalid_key
No or an invalid key in the Authorization header.
401
invalid_key
The key is revoked or unknown.
429
monthly_credits_used
This UTC month's calls are used up. The answer names limit and resetAt (Unix seconds, start of next month), plus the headers x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-reset.
503
register_busy
The register is paused and the company is not in our database yet. Try again later.
HTTP/1.1 429 Too Many Requests
x-ratelimit-limit: 50
x-ratelimit-remaining: 0
x-ratelimit-reset: 1796083200
{ "error": "monthly_credits_used", "limit": 50, "resetAt": 1796083200 }
MCP for AI assistants
So an AI assistant such as ChatGPT, Claude or Cursor can look things up in the register itself. Streamable HTTP at https://api.firmenbuchdaten.at/mcp (or https://firmenbuchdaten.at/mcp), the same key in the Authorization header. Tools: search_companies, get_company, get_financials. Every tool call costs one call.